2025年4月27日(日) 10:17 JST

2011年度第2回GDL講習会

  • 2011年4月21日(木) 11:06 JST
  • 投稿者:
    ゲストユーザ

第2回「螺旋階段」

第2回の講習では、FORループによる繰り返しの処理を学びました。第2回の宿題は、「螺旋階段」のモデリングです。 この課題のポイントは、極座標への変換と蹴込み部分の作り方です。


まず、講習で作成した螺旋階段を応用して、内側にも円ができるように、四角形で踏み面を描きます。 その後、踏み面の片側に角度t分幅をもたせ、踏み面同士が少しずれる様にします。次に蹴込み部分は、PLANEで描く際に、面の捩れ注意しなければなりません。 スクリプト確認では正常に通ってしまいますが、PLANEは同一平面上でなければ面を描画できません。ですので、三角形の図形を2つ使って蹴込みを作ります。蹴上の部分が少し折れているのが分かると思います。

以下、解答の一例です。

r1 = 10	!!外側半径
r2 = 2	!!内側半径
n  = 40	!!階段数
x  = 3	!!階段の回転数
t  = 5	!!踏み幅θ
h1 = 1	!!蹴上げ高さ
h2 = 5	!!手すり高さ


FOR i = 1 TO n
!!階段踏み面
	PLANE 4, r2*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), 0,
		 r1*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r1*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), 0,
		 r1*COS ( ( 360*x ) / n*i ), r1*SIN( ( 360*x ) / n*i ), 0,
		 r2*COS ( ( 360*x ) / n*i ), r2*SIN( ( 360*x ) / n*i ), 0

!!階段蹴上げ!!ねじれるので三角形2つで面を作る
	PLANE 3,r1*COS ( ( 360*x ) / n* ( i - 1 ) ), r1*SIN ( ( 360*x ) / n* ( i - 1 ) ), -h1,
		r2*COS ( ( 360*x ) / n* ( i - 1 ) ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) ), -h1,
		r2*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) -t ) , 0
	PLANE 3,r1*COS ( ( 360*x ) / n* ( i - 1 ) ), r1*SIN ( ( 360*x ) / n* ( i - 1 ) ), -h1,
		r1*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r1*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), 0,
		r2*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), 0

!!外側手すり
!!柱
	LIN_ r1*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r1*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), 0,
	     r1*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r1*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), h2
!!手すり
	LIN_ r1*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r1*SIN ( (  360*x ) / n* ( i -1 ) -t ), h2,
	     r1*COS ( ( 360*x ) / n*i -t ), r1*SIN ( ( 360*x ) / n*i -t ), h2 + h1

!!内側手すり
!!柱
	LIN_ r2*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), 0,
	     r2*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), h2
!!手すり
	LIN_ r2*COS ( ( 360*x ) / n* ( i - 1 ) -t ), r2*SIN ( ( 360*x ) / n* ( i - 1 ) -t ), h2,
	     r2*COS ( ( 360*x ) / n*i -t ), r2*SIN ( ( 360*x ) / n*i -t ), h2 + h1

	ADDZ h1		!!最後に高さをaddする
NEXT i