2011年7月7日木曜日

多面体描画道楽

Archimedesの多面体の最後は, snubdodecahedron, 日本語では変形正十二面体という.

ものの本によると, この立体は, 三角形が80, 五角形が12で構成される. 従って稜は(3×80+5×12)/2=150, 頂点は150+2-(80+12)=60である.

正十二面体は, 正五角形の面が12, 頂点はHamilton巡礼で良く知られた20, 稜(辺)はEulerの式から12+20-2=30あった. 従って, 変形正十二面体では, 正五角形は正十二面体の面に対応し, 三角形は頂点+2×稜である.

さて, 下の図を見て欲しい. 大きい正五角形が3つ描いてある. 左の上と下は, x軸の方から見て正面になるものだ. 右の寝そべったのは, y軸方向から見えるものだ.



それぞれの正五角形の中に, 適当に縮小した正五角形を描き, それをθだけ傾ける. 縮小しただけでは, 斜方正十二面体になる. 今回は傾けるのが味噌だ. 縮小したことで 元は3つの正五角形が1点に集まっていたものが, 図のE, H, Fのように分かれ, 三角形EHFが出来る.

また元は1つの辺だったものが, AEとGFに分かれる. 傾けたため, AとFが近づき, それを結ぶと, 三角形AFGと三角形FAEが図のように出来る.

つまり1つの頂点が1つの三角形, 1つの辺が2つの三角形になるから, 前述のように20+30*2=80の三角形になる.

従って, この立体の図を描くためには, 赤で示した線分の長さが等しくなるように, 縮小比と回転角を決めなければならない.

正面上の辺AEを持つ正五角形の各頂点の立体座標が分かれば, 下の辺FGを持つ正五角形の各頂点の立体座標は, 上の座標をx軸について, 180度回転すれば得られるということから始まり, すべての面の頂点の座標はなんとか軸対称回転で計算出来, 思い通りの変形正十二面体の図が得られるはずである.

いつものように, 1辺が2の正五角形で出来た正十二面体で計算する. 正五角形の中心までの高さは, tan 54°=1.3763819204711734; 上の頂点までの高さは, tan72°=3.0776835371752527; 半径はこの差だから 1.7013016167040793. その中に半径rに内接する正五角形を作る.

その中心から見た頂点の座標をまず計算する. 72n+36°の正弦と余弦をsn0やcs0のように書くことにする.

rとθが与えられると, 以下のプログラムは, 3次元に変換し, 各点のx,y,z座標を計算する. うっとうしいが全部書くと



これらの点から, AF, FE, EH, HFの距離とAEの距離の差の絶対値の和を最小にするrとθを決めたい. こんな式は, これ以上計算する気にならないので, 今回は山登り法で最適値を探すようにした.

とりあえず, rを0.8, 0.85, ... 1.25, thetaを0, 0.5, ...0.45と変え, この関数の値をプロットすると, この範囲に最小値があるらしい.



大体r=0.95, θ=0.21 radianあたりが解らしい. PostScriptで描画するから, この程度の値で充分である.



今回の描画プログラムは, 見えない面の破線は, 一度しか描かないようにしているから, 破線がきれいに見えている.

0 件のコメント: