建築でコンピュータ、する?
2024年10月 8日(火) 14:51 JST
第3回の講習ではFORループによる繰り返しの処理について学びました。FORループを用いることで同じ部材を連続して配置する等が可能になります。
講習内では例年と同じく「螺旋階段」のモデリングに取組み、課題として、第1回でモデリングした「windmill」外壁部をレンガ積みへと変更してもらいました。
この課題のポイントは、FORループ内部での座標変換、取り消しコマンド(ADD・ROT、DEL)の扱いです。 FORループを利用してBRICKを円周上に配置、積み重ねていきますが、このときローカル原点がどのように移動しているのか、意識しておくことが重要となります。ここでの考え方によって、よりスマートなスクリプトで描けるようになります。
今回の解答例では、まず円周上にレンガを並べていきました(下左図)。このときBRICKの生成位置に注意しなければなりません。今回はレンガの中心が法線上にくるようにずらしています(下中央図)。その後高さ方向に重ねていきましたが(下右図)、この時よりレンガ積みらしくなるよう、レンガ半個分ずつ回転させています。 また、レンガの配置間隔を整えるためにINT関数(与えられた値の整数部を返す)を用いました。
以下、解答の一例です。
!!!!!ここに第1回のスクリプトを挿入してください !!!!!!!!!!第3回追加分 rennga_w=0.2 !レンガ幅 rennga_d=0.05 !レンガ奥行 rennga_h=rennga_w/2 !レンガ高さ ennsyu=mill_r*2*PI !円周の長さ(直径×円周率) div_r=int(ennsyu/rennga_w) !一周分割数=レンガ個数 div_h=int(mill_h/rennga_h) !高さ分割数=レンガ個数 FOR j=1 TO div_h FOR i=1 TO div_r ADDY -(mill_r+rennga_d) !レンガを円周上に移動 ADDX -rennga_w/2 !レンガの中心を円の法線上に移動 BRICK rennga_w,rennga_d,rennga_h DEL 2 !ローカル座標を中心に戻す ROTZ 360/div_r !次のレンガ生成位置に角度を合わせる NEXT i ROTZ 360/div_r/2 !レンガが半個ずれて置かれるよう回転 ADDZ (mill_h-rennga_h*div_h)/(div_h-1)+rennga_h !(小屋高さ-レンガ総高さ)/(隙間の数)+レンガ高さ NEXT j DEL TOP
凹凸により色の明暗が表現され、第1回と比較してより精細なつくりとなったのではないでしょうか。講習が終わるころにはより細部にこだわった作品がつくれるようになります。
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。