Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8335

東大数学2024問題5 (part 5): 立体図形の2D投影 - 複天一流:どんな手を使ってでも問題解決を図るブログ

$
0
0

前回のあらすじ

平面の方程式について復習し、平面が法線ベクトルと切片の情報で特徴づけられることを確認した。 また、法線ベクトルを3次元極座標で表す方法について、3次元回転行列を用いて考察した。 計算した3次元座標をgnuplotによって表示してみた。これで、3次元の情報を2次元スクリーンに投影する一歩手前まで到達し、原理的にそれが何を意味するかほぼ理解した(と思う)。

今回は、実際に投影図を描いてみたい。

3次元座標の2次元平面への投影

3次元座標は$(x,y,z)$と3つの自由度の情報をもつがゆえに「3次元」である。しかし、コンピュターのスクリーンや紙に描く図は「2次元」情報であるから$(x,y)$となり、情報が一つ抜け落ちる。しかし、2次元平面上に、あたかも「3次元空間」のような図形を描くことは可能であり、それを実現するのが「投影法」である。ダヴィンチなどルネサンスの画家たちは、いかにして3次元物体を2次元平面内に再現するかについて芸術的かつ論理的な努力を重ね、ついに「遠近法」という手法を発見した。投影法というのは、絵画における遠近法をより数学的に再解釈したものと言えよう。

我々の場合、立体を投影する先は$x=0$平面と決めた。これがどういう意味を持つのか考察してみる。まず様々な値を持つ$x_0$に対し、$x=x_0$という平面を(複数)用意する。つまり、平行に置かれたたくさんの平面がx軸に垂直になるように用意される状況である。考えている立体はこの無数の平面の集合によって「切断」されるので、我々はその断面の形をすべて記録する。このとき記録するのは透明なフィルムのような媒体とし、それを全て重ねると、様々な断面の形の集合が一つの「絵」として寄せ集められることになる。

我々の場合は3次元空間中の平面を扱うので、その断面ひとつひとつは線分の形状を持っている。これらの(断面としての)線分の集合は要素が増えるにつれ(「フィルム」を重ねた図面中で)次第に平面のような「絵」になっていくだろう。数学的には、断面である線分の方程式を$x=0$の平面に「貼り付ける」ことで同じことが再現できる。このとき、$x=0$平面に現れた(多数の線分からなる)平面状の図形が「投影図」に相当する。つまり、3次元物体を2次元で表現した図形である。それはあたかも3次元物体を眺めているような図形に見えるはずで、いわゆる遠近法と等価なものになっているだろう。

多重積分を行うときに上と同じような概念が利用されのは知っておいて損ではないだろう。例えば、立体の体積を求める3重積分では、立体の断面$S$を考え、それに薄く厚みを持たせた「板状」の領域(例えば$S\Delta L$)を($L$の方向で)足し合わせることで体積$V=\sum S\Delta L$を計算する。面積の場合は、閉曲線を薄くスライスし、短冊状あるいは紐状の細長い四角形を足し合わせて面積とする。

各線分の端点の座標を計算して端点の集合を作り、すべての端点同士を結びつければ、断面図の輪郭つまり投影図が形成されるだろう。我々は(3次元空間中の)正方形を扱っているので断面の輪郭も直線(線分)となるので、4つの頂点の位置さえわかれば、3次元空間中で輪郭ができるか把握できる。したがって4点を扱うだけで、3次元空間中に浮かぶ正方形の、$x=0$平面上への投影図が描けるだろう。

具体的にいうと、これは3次元で計算した(x,y,z)の情報を$(0,y,z)$に押し込めるようなものである。つまり、各点の3次元座標を計算した後、x座標をただ単に「無視」し、yとz座標だけを用いた2次元座標(y,z)に落とし込めば、($x=0$という)スクリーン上の立体図、つまり投影図が描けることになる。

前回の考察で、$R(\theta,\phi)$という3次元回転行列を定義し、法線ベクトルを極座標で表した。この行列を$x=0$平面で定義された正方形ABCDの4つの頂点に作用させ、3次元空間中の正方形A'B'C'D'を生成する。拡張点の座標が計算できるから、そのy、z座標だけを抜き出して2次元表示すれば、それが($x=0$平面への)投影図になっているはずである。

投影図の数学的表現

概念は整理できたが、実際にはどういう計算をすればよいのか一抹の不安があるはずである。そういうときは具体例をひとつやってみるに限る。まずは、問題5で登場した$x+y+z-1=0$と平行で原点を通る平面$x+y+z=0$を描画してみよう。極座標表示の場合、この平面は$\theta=45^\circ, \phi=45^\circ$に対応する。法線ベクトル$\boldsymbol{n}(\theta=45^\circ, \phi=45^\circ)$は \begin{equation} \boldsymbol{n}(\theta=45^\circ, \phi=45^\circ)=R(\theta=45^\circ, \phi=45^\circ)\boldsymbol{e}_x \end{equation} で計算できるのはもはや自明である(計算する必要はない)。計算するのはA,B,C,Dの$R(\theta,\phi)$による写像A',B',C',D'の座標である。

計算したまま、x座標を手で抜いて$(y,z)$を図示するとx軸方向から見た投影図になる。実際にやってみると次のようになった。

$x+y+z=0$をx軸からみた投影図

「奥行き」の表現がいまひとつなので、「うーむ、間違っているとはいえないかも」程度の水準ではある。しかし、「明確にこれは間違い」という感じでもない。やはり少し「回して」みないと、つまり角度をつけて見てみないと人間というのは奥行きがわからないものである。

見る方向の角度をつけてみる。

そこで、図形を見る方角というものを計算に取り込んでみる。現在のx軸の方向から見る、つまり$-\boldsymbol{e}_x$の方角に平面を眺めるという状態から視線を$\alpha,\beta$だけずらしてみよう。$\beta$は天頂角に相当する角度だが、いまはx軸からのずれとして定義する。これは基本平面が$x=0$であり、その法線ベクトルが$\boldsymbol{e}_x$だからである。$\alpha$はx軸から測ったz軸周りの方位角として定義する。視線を$+\alpha$ずらすということは、平面を$-\alpha$回転させることに相当するので、計算では$R_y(-\alpha)$を適用する。力学の初歩でならう「相対運動」の関係を思い出せば、active rotationとpassive rotationが富豪の正負で関連づけられることはすぐにわかるだろう。一方、視線を$+\beta$だけ上方にずらす行為は平面回転を$R_y(\beta)$とすることに相当する(天頂角の定義により符号は反転しないことに注意)。

ということで、視線$(\alpha,\beta)$で、法線ベクトル$(\theta,\phi)$の平面を「見た」ときの投影図は、次のような計算で実現できることになる。 \begin{equation} R_z(-\alpha)R_y(\beta)R(\theta,\phi)\boldsymbol{e}_x \end{equation} 計算して出てくる行列はかなり面倒な形をしているので、ここでは省略する。(1,1)の位置にある行列要素だけ抜粋すると \begin{equation} \cos\alpha\left(\cos\beta\cos\phi\sin\theta+\sin\beta\cos\theta\right)+\sin\alpha\sin\phi\sin\theta \end{equation} といった感じになる。このような量を3x3=9個準備するのである(うんざり)。そしてその行列を利用してA,B,C,Dなどを回転する計算を行うのである(さらにうんざり)。ということで、実際の計算はコンピュータに任せるとして、平面$x+y+z=0$を$\alpha=15^\circ, \beta=25^\circ$だけずらした視線から見た図(投影図)を見てみよう。

$(\alpha,\beta)=(15^\circ,25^\circ)$の方角からみた$x+y+z=0$

すこしだけ分かりやすく見えるようにx軸だけ真っ黒な色にし、残りの軸は灰色にしてみた。さっきよりは「$x+y+z=0$感」が増した気がしないでもない。忘れないでもらいたいのは、上の図形は「2次元図形」として描いた「3次元物体」の絵であるという点である。

さて、もうすこし手を加えて「もっと立体ぽく」するならば、法線ベクトルを描き加えることであろう。(つづく)


Viewing all articles
Browse latest Browse all 8335

Trending Articles