みたにっき@はてな

三谷純のブログ

見る方向によって正三角形・正四角形・正五角形が現れる立体

球以外の立体は、見る方向によって異なる輪郭線が見えます。

試しに、正三角形、正四角形、正五角形が現れる立体(多面体)を作ってみました。

CGだけではなんなので、実際に作ってみました。


(望遠レンズで撮影するともっと綺麗に正多角形が見えると思うのだけど。)


紙模型を作るのに使った展開図はこんな感じ。

PDFファイルはこちらです。
http://mitani.cs.tsukuba.ac.jp/dl/2015/intersection_of_three_solids_mitani_2015.pdf


2つの異なる形が見えるようにするのは簡単なのですが、3つ(今回は正三角形、正四角形、正五角形)の形が見えるようにするのは簡単ではありません。


基本的には、互いに交差する正三角柱、正四角柱、正五角柱から、ANDを取ればいいのだけど・・


実際は、下の図のように、それぞれの角柱を少しだけ傾けてからANDを取っています。

以下、簡単な説明。
まず、上の図のように角柱を配置したとして、正三角形が上面、正五角形が正面、正四角形が側面であるとします。
3つの多角柱でANDを取るとき、それぞれの多角柱が他の多角形の輪郭を削り取ってしまわないようにするために、次のような条件を満たす必要があります。

・正三角形と正五角形の幅(W)が同一である
・正三角形と正四角形の奥行(D)が同一である
・正五角形と正四角形の高さ(H)が同一である

正四角形はどのように回転させても、高さと奥行きが1:1の比になるので、H=D。
つまり、正三角形と正五角形を適当に回転させて、正三角形と正五角形の幅 W を等しく保ちつつ、
正三角形の奥行Dと正五角形の高さHが等しくなればよい。
D=Hである必要があるが、H!=Wで構わない。しかし、正三角形と正五角形は、適当に回転させれば正方形に内接できるので、D=H=Wとする。


詳細は省いて、結果として正三角形を15°、正五角形を9°だけ回転させると上記の条件を満たす。


では正方形はどれだけ回転させればよいか?

これまた詳細をかなり省いてしまって、必要なカドが残るようにするには、側面図において、四角形の角が下図の赤丸を通るようにする必要がある。

これを計算すると約6.564°傾ければよいことがわかる。
(下図のような感じでゴリゴリと求める)


それぞれの角柱の外接円の半径についても計算すると、
正三角柱を1とすると、正四角柱は0.85、正五角柱は0.89とすればよい。


いずれも簡単な三角関数が扱えれば求まってしまいます。


このようにして設定した角柱間のANDを取ると、実は綺麗な多面体にならずに、微小な長さの辺がいくつか残ってしまうので、
前述の紙模型は、このような誤差を無視して、面の数を12に抑えて作ったのでした。