建築でコンピュータ、する?
2025年1月20日(月) 04:21 JST
第4回GDL講習会では、配列を用いて3次元曲面を作成する方法を学びました。この範囲は過去の記事と重複するので、 こちら(2010年度のGDL講習会ページ)をご覧ください。
今回の課題は、配列を使って、媒介変数で表現された球とコイルの作成でした。
球の媒介変数は
となります。x = COS( θ ) * COS( φ ) y = COS( θ ) * SIN( φ ) z = SIN( θ ) {0 <=θ<= 2π} {0 <=φ<= π}
この式では変数Θとφでの範囲が弧度法で示されているので範囲を角度に変換してFORループを回します。
DIM x[][],y[][],z[][] deg=180 !! π (180度) FOR i = 1 TO 2*deg+1 !!Θの範囲をFORループで回す。 FOR j = 1 TO deg+1 !!φの範囲をFORループで回す。 x[i][j]=cos(i)*cos(j) y[i][j]=cos(i)*sin(j) z[i][j]=sin(i) NEXT j NEXT i FOR i = 1 TO 2*deg FOR j = 1 TO deg LIN_ x[i][j],y[i][j],z[i][j], !! xy平面と平行な座標をつなぐ。 x[i][j+1],y[i][j+1],z[i][j+1] LIN_ x[i][j],y[i][j],z[i][j], !!z軸方向に座標つなぐ。 x[i+1][j],y[i+1][j],z[i+1][j] NEXT j NEXT i
同じ要領でコイルも作ります。
コイルの媒介変数は
となっています。x = ( R + r * COS(φ)) * COS(θ) y = ( R + r * COS(φ)) * SIN(θ) z = r * SIN(φ) + dz { 0 <= φ <= 2π } { 0 <= θ <= 4π }(下のコードの場合) ただしdzは、コイルの回転に伴うZ方向への増分
DIM x[][],y[][],z[][] deg=180 !! π(180度) FOR i = 1 to 2*deg+1 !!Θの範囲をFORループで回す。 FOR j = 1 to 4*deg+1 !!φの範囲をFORループで回す。 x[i][j]=(5+cos(i))*cos(j) y[i][j]=(5+cos(i))*sin(j) z[i][j]=sin(i)+0.5*PI*j/deg next j next i !! コイルの円を描く FOR i = 1 to 2*deg FOR j = 1 to 4*deg LIN_ x[i][j],y[i][j],z[i][j], x[i+1][j],y[i+1][j],z[i+1][j] NEXT j NEXT i !! 上で描いた円と円をつなぐ線を描く FOR i = 1 to 2*deg FOR j = 1 to 4*deg-1 LIN_ x[i][j],y[i][j],z[i][j], x[i][j+1],y[i][j+1],z[i][j+1] NEXT j NEXT i
以上のスクリプトでもコイルは書けますが、FORループが360*720回も回ってしまい処理に時間がかかってしまうのでモデルが変わらない程度に処理の回数を減らしてあげましょう。今回は180度を12度ずつ15個に分けます。
ちなみにこのコイルはGDL教科書P42のTUBEコマンドを用いても描くことができます。興味のある方はやってみましょう。DIM x[][],y[][],z[][] deg=12 div=15 for i = 1 to 2*deg+1 for j = 1 to 4*deg+1 x[i][j]=(5+cos(i*div))*cos(j*div) y[i][j]=(5+cos(i*div))*sin(j*div) z[i][j]=sin(i*div)+0.15*j next j next i FOR i = 1 to 2*deg FOR j = 1 to 4*deg LIN_ x[i][j],y[i][j],z[i][j], x[i+1][j],y[i+1][j],z[i+1][j] NEXT j NEXT i FOR i = 1 to 2*deg FOR j = 1 to 4*deg-1 LIN_ x[i][j],y[i][j],z[i][j], x[i][j+1],y[i][j+1],z[i][j+1] NEXT j NEXT i
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。