2022年9月8日木曜日

切頭八面体

久し振りに切頭八面体について書きたい. TAOCPにおやという記述があった.

a: 切頭八面体の基本的な置き方は, (htmlでは式が書き難いから言葉で述べると) 0,1,2,3の, 同じもののない3つ組である.

b: 体心立方格子のVolonoi領域である.

bはなるほどそうらしいと思うが, そしてそういう言い方もあるのかと思うが, aはすぐには分らなかった. その組を作ってみると,
((0 1 2) (0 1 3) (0 2 1) (0 2 3) (0 3 1) (0 3 2) 
(1 0 2) (1 0 3) (1 2 0) (1 2 3) (1 3 0) (1 3 2) 
(2 0 1) (2 0 3) (2 1 0) (2 1 3) (2 3 0) (2 3 1) 
(3 0 1) (3 0 2) (3 1 0) (3 1 2) (3 2 0) (3 2 1))
になり, たしかに24個あって, 切頭八面体の頂点の数と同じである.

それぞれの3つ組を(x, y, z)と思い, 高さ(z) 別に絵を描くと, 下の図の上段のようになる. z=0, つまり底の面に点が6個あるから, これは六角形を床に置いた図らしいと分る. 六角形にしてはいびつだが, それは直交 座標のためらしいから, x軸とy軸の角度を60度にしてもう一度描いたのが中段の図である.

なるほど六角形が現れる.

そこでx軸とz軸, y軸とz軸の角度も60度にしたグラフ用紙を作って, 上に点を 書き込むことにした. つまり, x軸y軸z軸は正四面体の3本の辺に沿っている. それが上の赤緑青の線である. 赤はz=0の平面座標で, その三角形の中心を起点とした緑のz=1の平面座標が出来, その三角形の中心を起点とした青の z=2の平面座標が出来る. 同様にしてz=3の座標が出来るが, それはz=0のと一致する.

黒線で描いたのが六角形を底にした切頭八面体である.

これを確認するため, 別の切頭八面体の絵もある. 左上Aは, 私が通常に描く切頭八面体 である. その中心を通る直交するx軸(赤), y軸(緑), z軸(青)も描いてある.

私の描画プログラムは, 頂点の座標を座標軸に平行移動したり, 座標軸に沿って回転 したり出来る. BはAの図を, z軸について45度回転したものだ. Cはそれを右下の 5,12の辺が, xyz軸の中心に来るように移動したもの. Dはそれを右下の六角形が 底に来るように, x軸について回転したものである. 最後のEは, 座標軸の中心に 切頭八面体の中心が来るように移動した.

この時, 各頂点の直交座標での位置は次の通りである. (左は頂点の番号順, 右は高さ別)
     0 (-2.121 0.408 -0.577)      9 (-1.414 0.0 1.732)	
     1 (-1.414 0.0 -1.732)	  11 (-0.707 1.225 1.732)	
     2 (-1.414 1.633 -0.577)	  16 (-0.707 -1.225 1.732)	
     3 (-0.707 1.225 -1.732)	  18 (0.707 1.225 1.732)	
     4 (-2.121 -0.408 0.577)	  20 (0.707 -1.225 1.732)	
     5 (-0.707 -1.225 -1.732)	  22 (1.414 0.0 1.732)	
     6 (-0.707 2.041 0.577)	  1 (-1.414 0.0 -1.732)	
     7 (0.707 1.225 -1.732)	  3 (-0.707 1.225 -1.732)	
     8 (-1.414 -1.633 0.577)	  5 (-0.707 -1.225 -1.732)	
     9 (-1.414 0.0 1.732)	  7 (0.707 1.225 -1.732)	
     10 (-0.707 -2.041 -0.577)	  12 (0.707 -1.225 -1.732)	
     11 (-0.707 1.225 1.732)	  14 (1.414 0.0 -1.732)	
     12 (0.707 -1.225 -1.732)	  4 (-2.121 -0.408 0.577)	
     13 (0.707 2.041 0.577)	  6 (-0.707 2.041 0.577)	
     14 (1.414 0.0 -1.732)	  8 (-1.414 -1.633 0.577)	
     15 (1.414 1.633 -0.577)	  13 (0.707 2.041 0.577)	
     16 (-0.707 -1.225 1.732)	  21 (1.414 -1.633 0.577)	
     17 (0.707 -2.041 -0.577)	  23 (2.121 -0.408 0.577)	
     18 (0.707 1.225 1.732)	  0 (-2.121 0.408 -0.577)	
     19 (2.121 0.408 -0.577)	  2 (-1.414 1.633 -0.577)	
     20 (0.707 -1.225 1.732)	  10 (-0.707 -2.041 -0.577)	
     21 (1.414 -1.633 0.577)	  15 (1.414 1.633 -0.577)	
     22 (1.414 0.0 1.732)	  17 (0.707 -2.041 -0.577)	
     23 (2.121 -0.408 0.577))	  19 (2.121 0.408 -0.577)    
各頂点の直交座標(x,y,z)を, 斜方座標(a,b,c)に変換するには, 例えば
(define (tcood x y z)
(let* ((c (/ (* z 3) (sqrt 6)))
       (b (/ (* (- y (/ (* c (sqrt 3)) 6)) 2) (sqrt 3)))
       (a (- x (/ b 2) (/ c 2))))
(list a b c)))
しかしこれで変換すると0.707や2.121が出るので, 正規化すると, 先程の24個の 直交座標は
((-3 1 -1) (-1 1 -3) (-3 3 -1) (-1 3 -3) (-3 -1 1) (1 -1 -3)
 (-3 3 1) (1 3 -3) (-1 -3 1) (-3 -1 3) (1 -3 -1) (-3 1 3)
 (3 -1 -3) (-1 3 1) (3 1 -3) (1 3 -1) (-1 -3 3) (3 -3 -1)
 (-1 1 3) (3 1 -1) (1 -3 3) (3 -3 1) (1 -1 3) (3 -1 1))
なるほど, 最初に書いた座標は0,1,2,3であったが, 今回のは. 切頭八面体の中心に座標の 中心を置いたので, -3,-1,1,3で構成されていた.

0 件のコメント: