AIモデリング05: 芸術的な壺
AIモデリングのサンプルです。
# モデル5: 芸術的な壺
# 花びら形の断面を、高さごとに大きさを変えつつねじりながら loft でつなぐ。
# 胴がふくらみ、首ですぼまり、口で少し開く。外形と内形を同じ手順で作って引く。
@param 120..260 desc:"高さ (mm)"
vase_h = 180
@param 4..12 desc:"花びらの数"
petals = 8
@param 0..20 step:1 desc:"花びらの凹凸 (半径に対する%)"
wave = 8
@param 0..90 desc:"全体のねじれ角 (度)"
twist = 60
@param 1.6..4 step:0.1 desc:"肉厚 (mm)"
wall_t = 2.4
@param 3..8 desc:"底の厚み (mm)"
bot_t = 4
# 花びら形の断面: r(θ) = R(1 + wave·cos(petals·θ)) を点列にして spline で閉じる。
# $rot で断面をねじり、$t だけ内側に寄せる(内形用)
N = 48
def radius_at($R, $k, $t) = $R * (1 + wave / 100 * cos(petals * 360 * $k / N)) - $t
def px($R, $k, $rot, $t) = radius_at($R, $k, $t) * cos(360 * $k / N + $rot)
def py($R, $k, $rot, $t) = radius_at($R, $k, $t) * sin(360 * $k / N + $rot)
def petal($R, $rot, $t) = sketch [(px($R, 0, $rot, $t), py($R, 0, $rot, $t)), spline [(px($R, $k + 1, $rot, $t), py($R, $k + 1, $rot, $t)) for $k in range(N)]]
# 高さ方向の断面: 高さの比率と基準半径
$zs = [0.0, 0.25, 0.55, 0.8, 0.9, 1.0]
$rs = [30, 40, 47, 28, 20, 25]
$offsets = [vase_h * $zs[$i + 1] for $i in range(5)]
def body($t) = petal($rs[0], 0, $t) | loft [petal($rs[$i + 1], twist * $zs[$i + 1], $t) for $i in range(5)] $offsets
$outer = body(0)
# 内形は底を bot_t 残すために下を切り落とす
$inner = body(wall_t) - (box 200 200 bot_t | floor)
$outer - $inner