ネットで話題の錯視立体 [日常のあれやこれや]
金曜の夜、工場から帰ってきて、昨日1日遅れを取り戻そうと(工場ではシーズンにホテルが取れなくなるのでアパートを借りている。そこではネットはつながらない)いろいろなサイトを見ていたら、面白いのが話題になってる。斜め上から見たときに円筒に見えて、その180°反対側からは四角柱に見えるという立体。こういうのよく思いつくなあ。いろいろいじってるうちに思いついたんだろうなあ。
例えば簡単のため、斜め上と言うのをちょうど45°方向、つまり$(1,0,1)$方向から見ると考える。その方向から見たときに円に見えるようなものと、$(-1,0,1)$方向から見たときにひし形に見えるものとの交線となるような空間曲線を、$(0,0,1)$方向に引き伸ばした形であればいいことはすぐわかる。つまり斜円筒と平面との交線なので楕円の一部が繋がった空間曲線を、上方向に積み上げた立体になる。僕はまえ自分で似たようなことをして遊んだので、すぐわかった。
具体的に計算してみれば、
\begin{align} c_0(\theta,z)&=(-\sin \theta+\cos \theta+1,\;2 \sin \theta,\;-\sin \theta-\cos \theta+1+z)\nonumber \\ c_1(\theta,z)&=(\sin \theta-\cos \theta-1,\;-2 \sin \theta,\;\sin \theta+\cos \theta-1+z)\nonumber \\ c_2(\theta,z)&=(-\sin \theta+\cos \theta-1,\;2 \cos \theta,\;\sin \theta+\cos \theta-1+z)\nonumber \\ c_3(\theta,z)&=(\sin \theta-\cos \theta+1,\;-2 \cos \theta,\;-\sin \theta-\cos \theta+1+z)\nonumber \\ 0\le &\theta < \pi/2\nonumber \\ -1\le &z \le 1\nonumber \end{align} で、この4つの面をつないだものになる(式が簡単になるように適当な定数倍になっている。このまま描くと円の直径は4に、ひし形の一辺の長さは$\sqrt{2}$になる)。パラメータがふたつ$\theta$と$z$あるけど、ムービーで見えている立体の切り口は$z=z_0$の空間曲線である。もうちょっと対称性のわかりやすい式にしようと思ったんだけど、なぜかうまくいかなかった。なんだか変な式に見えるけど、楕円の一部である。パラメトリックな式は出発点が悪いとなかなかきれいにならない。
立体の切り口になる空間曲線を平行法で立体視できるような絵で描いてみると となる。この空間曲線を$(0,0,1)$方向に引き延ばせばいい。しかしこの絵はあまり分かりやすくないな。3面図風に描くと 遠近法的な見え方になってしまってわかりにくいけど、4つの空間曲線はお互いに鏡映対称である。つまり1本を取り出して$(1,0,0)$を法線にする面で鏡映して、さらにその両方を$(0,1,0)$を法線にする面で鏡映すると空間曲線が完成する。
この空間曲線を斜め45°方向から見た絵を立体として描いてみると となる。左側の上が$(-1,0,1)$から見た絵で、下が$(1,0,1)$からの絵である。ちょうどムービーにあるように上が鏡に映した絵だと思えばいい(鏡では左右反転するけど形は対称なので結果は同じ。あ、面の色付けが違うか。でもまあいいや)。右側は同じ立体をMathematicaデフォルトのViewPointで描いた絵である。
こうやって後から計算するのは簡単だけど、これを思いつくのはなかなかである。こういうのはセンスというのもあるだろうけど、大抵はいろいろ試してみないと思いつかない。ただのおもちゃだけどそれなりに積み重ねが必要なはずである。
いや、面白い。僕も見習いたい。
追記:
鏡映を2回繰り返せばいいように書いたけど、それは間違い。式を見ればわかる。その式も$\theta$の増える方向に対する面の向きを気にしなければずっと簡単になって、どの象限にあるかによって符号の組み合わせだけ変えれば、一つの式に集約できる。けど、書き直すのがめんどくさいのでもういいや。
例えば簡単のため、斜め上と言うのをちょうど45°方向、つまり$(1,0,1)$方向から見ると考える。その方向から見たときに円に見えるようなものと、$(-1,0,1)$方向から見たときにひし形に見えるものとの交線となるような空間曲線を、$(0,0,1)$方向に引き伸ばした形であればいいことはすぐわかる。つまり斜円筒と平面との交線なので楕円の一部が繋がった空間曲線を、上方向に積み上げた立体になる。僕はまえ自分で似たようなことをして遊んだので、すぐわかった。
具体的に計算してみれば、
\begin{align} c_0(\theta,z)&=(-\sin \theta+\cos \theta+1,\;2 \sin \theta,\;-\sin \theta-\cos \theta+1+z)\nonumber \\ c_1(\theta,z)&=(\sin \theta-\cos \theta-1,\;-2 \sin \theta,\;\sin \theta+\cos \theta-1+z)\nonumber \\ c_2(\theta,z)&=(-\sin \theta+\cos \theta-1,\;2 \cos \theta,\;\sin \theta+\cos \theta-1+z)\nonumber \\ c_3(\theta,z)&=(\sin \theta-\cos \theta+1,\;-2 \cos \theta,\;-\sin \theta-\cos \theta+1+z)\nonumber \\ 0\le &\theta < \pi/2\nonumber \\ -1\le &z \le 1\nonumber \end{align} で、この4つの面をつないだものになる(式が簡単になるように適当な定数倍になっている。このまま描くと円の直径は4に、ひし形の一辺の長さは$\sqrt{2}$になる)。パラメータがふたつ$\theta$と$z$あるけど、ムービーで見えている立体の切り口は$z=z_0$の空間曲線である。もうちょっと対称性のわかりやすい式にしようと思ったんだけど、なぜかうまくいかなかった。なんだか変な式に見えるけど、楕円の一部である。パラメトリックな式は出発点が悪いとなかなかきれいにならない。
立体の切り口になる空間曲線を平行法で立体視できるような絵で描いてみると となる。この空間曲線を$(0,0,1)$方向に引き延ばせばいい。しかしこの絵はあまり分かりやすくないな。3面図風に描くと 遠近法的な見え方になってしまってわかりにくいけど、4つの空間曲線はお互いに鏡映対称である。つまり1本を取り出して$(1,0,0)$を法線にする面で鏡映して、さらにその両方を$(0,1,0)$を法線にする面で鏡映すると空間曲線が完成する。
この空間曲線を斜め45°方向から見た絵を立体として描いてみると となる。左側の上が$(-1,0,1)$から見た絵で、下が$(1,0,1)$からの絵である。ちょうどムービーにあるように上が鏡に映した絵だと思えばいい(鏡では左右反転するけど形は対称なので結果は同じ。あ、面の色付けが違うか。でもまあいいや)。右側は同じ立体をMathematicaデフォルトのViewPointで描いた絵である。
こうやって後から計算するのは簡単だけど、これを思いつくのはなかなかである。こういうのはセンスというのもあるだろうけど、大抵はいろいろ試してみないと思いつかない。ただのおもちゃだけどそれなりに積み重ねが必要なはずである。
いや、面白い。僕も見習いたい。
追記:
鏡映を2回繰り返せばいいように書いたけど、それは間違い。式を見ればわかる。その式も$\theta$の増える方向に対する面の向きを気にしなければずっと簡単になって、どの象限にあるかによって符号の組み合わせだけ変えれば、一つの式に集約できる。けど、書き直すのがめんどくさいのでもういいや。
2016-07-04 06:56
nice!(0)
コメント(0)
トラックバック(0)
コメント 0