錯視立体ふうのおもちゃで遊ぶ [日常のあれやこれや]
先日、出張先でもらったミネラルウォータのボトルが面白かった。持って帰ってくればよかったんだけど、それも変だと思ったので諦めた。どんなのかというと、
こんなので、この写真ではわからないけどちょっと斜め上から見ると下のほうが四角くなっているように見える。でも実際はずっと円筒形で、下に3本あるくぼみの線が波打っているせいでそう見えるだけだった。
これのマネをしてみよう、と思った。つまり、円筒に線を引いて、ある方向から見ると円筒ではないように見える、というものを作ってみた。一種の錯視立体である。
ということで、できたのがこれ。
(埋め込みは小さいのでYouTubeにジャンプ)レインボーカラーの線が平行に引かれている、と思ってしまって真ん中付近は四角い立体だととらえてしまう。でもそうすると外形がまっすぐなのがちょっとおかしい。
平面に描いてある凹凸の絵で錯覚するのとまったく同じ。
仮想的な空間曲線を視点から円筒面に投影すればいい。仮想的な空間曲線とは今回の場合、四角形の表面に描いた平行なレインボーカラーの直線である。
下の図のように(なんか情けない絵だけど)、視点の位置をv、空間曲線をf(t)とする。tは曲線を描くための1次元のパラメータである。
この空間曲線は円筒面からあまり大きく離れないとしておく。でないと上下関係が逆転したり、円筒面上に投影される確率が下がって、見た目に不自然になる。 もちろんvとf(t)は3次元のベクトルで である。
投影する円筒の半径をRとして、円筒の軸をz方向にとる。f(t)を投影した点をp(t) = (px,py,pz)とすると、vからf(t)への直線上にあるはずなので、αを変数として と書ける。
また、円筒上の点だから はずなので、式-2に式-1を代入して としてαを解けばいい。式-3は2次式なので解は2個ある。それは円筒の視点から見えている側とその反対側に対応するので、場合分けが必要になる。ふたつの解をα1とα2とすると、解αと1との大小関係で円筒と空間曲線の位置関係がわかるので
となる。
最後の場合は「空間曲線が円筒面からあまり離れていない」と言う条件があるのでこうすることができるが、本当はもう少し微妙で、空間曲線が円筒のどの部分に対応しているかを調べる必要がある。
式-3はαについて解いてしまうことができるけど、式が大きくなるので書かない。求まったαを式-1に代入し直せば、図-2のような、円筒面へ投影された曲線が得られることになる。 これを平面に展開すればいい。平面への展開は円筒面上なので簡単で、対応する平面(η,ξ)上の点をg(t) = (gη(t),gξ(t) )とすると として平面に描けばいい。
そうやってレインボーカラーの線を引いたのがこのpdfとこのpdf。 同じことをやってみたいひとは、このpdfをそれぞれ
またもし、自分でいろいろ計算して作ってみたい、というひとはメールを頂ければMathematica 6.0のコードをお渡しします(今回は、Mathematicaで計算して線をグラフに描いて、それをIllustratorに読み込んでpdfにした)。コーディングのできるひとなら上の式だけで十分かもしれないし、またいっぽう普通のひとはしょーもない遊びだな、と思うだけかもしれないけど。
線がところどころ途切れているのは空間曲線と円筒面が近くて、しかもその面にほぼ平行に視線があるせいで、計算が桁落ちしてるせいだろうと思われる。めんどうなので修正していない。
いろいろ遊んで、作ってしまうとあきてしまう。そうやって机の上は残骸だらけになってしまう。こんなふうに。
こんなので、この写真ではわからないけどちょっと斜め上から見ると下のほうが四角くなっているように見える。でも実際はずっと円筒形で、下に3本あるくぼみの線が波打っているせいでそう見えるだけだった。
これのマネをしてみよう、と思った。つまり、円筒に線を引いて、ある方向から見ると円筒ではないように見える、というものを作ってみた。一種の錯視立体である。
ということで、できたのがこれ。
(埋め込みは小さいのでYouTubeにジャンプ)レインボーカラーの線が平行に引かれている、と思ってしまって真ん中付近は四角い立体だととらえてしまう。でもそうすると外形がまっすぐなのがちょっとおかしい。
平面に描いてある凹凸の絵で錯覚するのとまったく同じ。
仮想的な空間曲線を視点から円筒面に投影すればいい。仮想的な空間曲線とは今回の場合、四角形の表面に描いた平行なレインボーカラーの直線である。
下の図のように(なんか情けない絵だけど)、視点の位置をv、空間曲線をf(t)とする。tは曲線を描くための1次元のパラメータである。
この空間曲線は円筒面からあまり大きく離れないとしておく。でないと上下関係が逆転したり、円筒面上に投影される確率が下がって、見た目に不自然になる。 もちろんvとf(t)は3次元のベクトルで である。
投影する円筒の半径をRとして、円筒の軸をz方向にとる。f(t)を投影した点をp(t) = (px,py,pz)とすると、vからf(t)への直線上にあるはずなので、αを変数として と書ける。
また、円筒上の点だから はずなので、式-2に式-1を代入して としてαを解けばいい。式-3は2次式なので解は2個ある。それは円筒の視点から見えている側とその反対側に対応するので、場合分けが必要になる。ふたつの解をα1とα2とすると、解αと1との大小関係で円筒と空間曲線の位置関係がわかるので
解が実数でない : | 円筒への投影なし |
1 ≤ α1 < α2 : | 小さいほう(α1)が投影に対応する |
α1 < α2 ≤ 1 : | 投影なし(空間曲線が円筒の裏側) |
α1 < 1 < α2 : | 1に近いほうが投影に対応 |
式-3はαについて解いてしまうことができるけど、式が大きくなるので書かない。求まったαを式-1に代入し直せば、図-2のような、円筒面へ投影された曲線が得られることになる。 これを平面に展開すればいい。平面への展開は円筒面上なので簡単で、対応する平面(η,ξ)上の点をg(t) = (gη(t),gξ(t) )とすると として平面に描けばいい。
そうやってレインボーカラーの線を引いたのがこのpdfとこのpdf。 同じことをやってみたいひとは、このpdfをそれぞれ
- 原寸でプリントアウト
- 直径66mmのアルミ缶に巻き付ける
- 缶の中心を、30cmの距離から30°で見下ろすようなところに視点を置いて観察
またもし、自分でいろいろ計算して作ってみたい、というひとはメールを頂ければMathematica 6.0のコードをお渡しします(今回は、Mathematicaで計算して線をグラフに描いて、それをIllustratorに読み込んでpdfにした)。コーディングのできるひとなら上の式だけで十分かもしれないし、またいっぽう普通のひとはしょーもない遊びだな、と思うだけかもしれないけど。
線がところどころ途切れているのは空間曲線と円筒面が近くて、しかもその面にほぼ平行に視線があるせいで、計算が桁落ちしてるせいだろうと思われる。めんどうなので修正していない。
いろいろ遊んで、作ってしまうとあきてしまう。そうやって机の上は残骸だらけになってしまう。こんなふうに。
2013-01-26 20:55
nice!(0)
コメント(1)
トラックバック(0)
おもしろい
by 猫尾壁 (2022-05-27 05:17)