同次座標を使って並進を行列のかけ算で表そう

このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]同次座標の仕組みを知ることで並進を行列の積で実現しよう。[br]
1.同次座標は空間の串刺しだ
同次座標は空間の串刺しだ[br][br][b][size=150]<同次座標と直線>[br][br][/size][/b]次元を1つふやして比例による串刺しで表す座標を同次座標といいます。[br]たとえば、[br]2次元の[b]点A(a,b)[/b]は、1次元増やした点(a,b,1)と原点を通る直線[b]t(a,b,1)=(ta,tb,t)[/b]を同一視します。[br]3次元の[b]点A(a,b,c)[/b]は、1次元増やした点(a,b,c,1)と原点を通る直線[b]t(a,b,c,1)[/b]と同一視します。[br]このとき、[b]連比[/b](ta:tb:t)=(a1:a2:t),(ta:tb:tc:t)=(a1:a2:a3:t)をもとの点Aの[b]同次座標[/b]と言います。[br][b]同次座標を列ベクトルで表す[/b]と(a,b)=[a1,a2,1]t,(a,b,c)=[a1,a2,a3,1]tとかきます。[br][b]丸カッコが通常座標[/b]の列ベクトル、[b]角カッコが同次座標[/b]の列ベクトルということです。[br] [br][b][size=150]<平行移動の同次座標表示>[br][/size][/b][br]たとえば、3次元の点A(a)をベクトルpだけ[b]平行移動(並進)[/b]したときの点B(b)は[br]ふつうならば、v+u=(a,b,c)+(u1,u2,u3)=(a+u1,b+u2,c+u3)と成分のたし算でかきます。[br]しかし、これを次元を1つつけたして同次座標でかくと、行列の積で表現できるのです。[br]今後ベクトルの積は内積だけなので、[b]ドット記号などは省略[/b]します。[br]また、行列とベクトルの積も内積の多次元化と考えられるので、[b]積記号は省略[/b]します。[br]そして、[b]行列は{{行ベクトル}....{行ベクトル}}か{[列ベクトル]...[列ベクトル]}[/b][br]という表示をすることで、テキスト表示をします。[br]ただし、[b]{E3,p}[/b]は3次の単位行列の右に列ベクトルをくっつけた[b]3行4列の行列の断片(胞)[/b]を表します。[br]また、geogebraの流儀に合わせて、変数としては[b]ベクトルは小文字で、行列は大文字[/b]とします。[br][b][color=#0000ff]脳内でtexに置き換えて読んでください[/color][/b]。[br][br][b]b=a+p[size=150][color=#0000ff]=(a+u1,b+u2,c+u3)=[a+u1,b+u2,c+u3,1]t[/color][/size][/b][br]  =[ta+tu1,tb+tu2,tc+tu3,t][br] =[a1+tu1,a2+tu2,a3+tu3,t][br] ={{1,0,0,u1},{0,1,0,u2},{0,0,1,u3},{0,0,0,1}}}[a1,a2,a3,t][br][b][color=#0000ff][size=150] ={{E3,p},{0,0,0,1}}[a1,a2,a3,t][br][/size][/color][/b] [b]=S a'[/b][br]つまり、点Aをベクトルpだけ平行移動した点Bの位置は[br]第4の座標tを適当に決めましょう。[br]3次の単位行列E3のとなりに移動列ベクトルpをくっつけて4行目に{0,0,0,1}をくっつけた行列Sを作る。[br]Sは3行4列の行列の断片の下に1行4列の行列の胞をくっつけたので、4行4列の行列、[br]4次の正方行列になりますね。[br]そして、Aの列ベクトルaをtを使って同次座標にしたa'にする。[br]Sとa'の積がBの同次座標になるので、それをさっきのtで割ってあげれば、最初の3つの成分がa+pの成分になるということですね。[br][br][color=#9900ff][b][u][size=150]課題:geogebraで空間内の点A(3,4,5)をp=(3,2,1)並進した点の位置を行列の積で求めよう。[br][/size][/u][/b][/color][br]タイトルは「並進をたし算ではなく、かけ算で求める」[br]A=(3,4,5)[br]t=slider(-10,10,1)[br]p=(3,2,1) #位置ベクトルとして表示されるので非表示[br]a=(3,4,5) #点Aをさします。[br]u=a+p #(6,6,6)の列ベクトルが表示されます。[br]ad={{3t},{4t},{5t},{t}) #ad=(3t,4t,5t,t)と入力すると4次元目が無視されます。[br]S={{1,0,0,x(p)},{0,1,0,y(p)},{0,0,1,z(p)},{0,0,0,1}}[br]m1=S ad[br]b1=Element(m1,1,1)/Element(m1,4,1)[br]b2=Element(m1,2,1)/Element(m1,4,1)[br]b3=Element(m1,3,1)/Element(m1,4,1)[br]B=(b1,b2,b3) #点Bはベクトルuで指されます。[br][br]tを動かしてみましょう。特に変化はないですね。[br][br]でも[br][b]t=0になった瞬間点Bが消えます。[/b][br]なぜでしょうか。Bのもとになったm1を見てください。[br]同次座標は[列ベクトル]tで表されました。[br]だからオールゼロになっていますね。[br][br]これを復元しようとすると、点Bの座標であるb1,b2,b3を求めるときに、0による除算が起きます。[br][b]同次座標の空間にはオールゼロは許されない[/b]ということですね。[br]言い換えると、[br]同次座標空間のオールゼロはあらゆる直線が通るため、[b]方向すらない、空間全体を指すので「不定」[/b]です。これを通常座標に変換すると、0/0による除算でどの成分も「不定」、未定義になります。[br][br]同次座標空間の[b][x,y,z,0]は方向はあるけれど大きさが無限大だから「無限遠点」[/b]を表しますね。
並進をたし算ではなくかけ算で求める。
2.行列といえば、逆行列を考えたくなる
[br]並進といえば後退を、[br]行列といえば逆行列を考えたくなるね。[br][br]さっきの例でいうと、[br]p=(3,2,1)の逆進はpr=-(3,2,1)だ。これを表す行列はpの部分がprにすればよいね。[br]bにprをたせば、もとのaに戻れるはずだ。[br][b]a=b+pr={{E3,pr},{0,0,0,1}}[a1,a2,a3,t][br] =Sr b'[br][/b]Sのベクトルpを逆ベクトルprにおきかえて作った行列Srは本当に逆行列になるのだろうか。[br]積S・Srが単位行列になればよいね。[br][br]S・Sr={{1,0,0,u1},{0,1,0,u2},{0,0,1,u3},{0,0,0,1}}{{1,0,0,-u1},{0,1,0,-u2},{0,0,1,-u3},{0,0,0,1}}[br]={{1,0,0,u1},{0,1,0,u2},{0,0,1,u3},{0,0,0,1}}{[1,0,0,0],{0,1,0,0},{0,0,1,0},[-u1,-u2,-u3,1]}[br]={[br] [{1,0,0,u1}(1),{0,1,0,u2}(1),{0,0,1,u3}(1),{0,0,0,1}(1)]. [br] [{1,0,0,u1}(2),{0,1,0,u2}(2),{0,0,1,u3}(2),{0,0,0,1}(2)],[br] [{1,0,0,u1}(3),{0,1,0,u2}(3),{0,0,1,u3}(3),{0,0,0,1}(3)},[br] [{1,0,0,u1}[-u1,-u2,-u3,1],{0,1,0,u2}[-u1,-u2,-u3,1],{0,0,1,u3}[-u1,-u2,-u3,1],{0,0,0,1}[-u1,-u2,-u3,1]][br] }[br]={[1,0,0,0],[0,1,0,0],[0,0,1,0],[br] [-u1+u1,-u2+u2.-u3+u3,1]}[br][b]=E4[br][/b][br]単位行列になりますね。[br][br]もっと簡単に検証できないでしょうか?[br]胞体のままかけてみよう。[br]{0,0,0}=Oと行ベクトルの胞にします。綺麗に4胞×4胞になりすね。[br]pは列ベクトルのまま入れます。紛らわしので、ベクトルの先頭に行、列という文字をつけます。[br][b][color=#0000ff]サイズが3のときは、列ベクトル×行ベクトルは3×3行列になり、[br]行ベクトル×列ベクトルは内積でスカラーになることに注意しよう。[br][/color][/b][br]S Sr={{E,列p},{行O,1}}{{E,-列p},{行O,1}}[br]={{E,列p},{行O,1}}{[E,行O],[-列p,1]} [br][br]左上=EE+列p行O=E+3行3列O=E(3行3列)[br]左下=行OE+1*行O=行O+行O=行O(1行3列)[br]右上=E(-列p)+列p*1=-列p+列p=列O(1列3行)[br]右下=行O(-列p)+1*1=0+1=1(スカラー)[br][br]だから[br][b]S Sr={[E,行O],[列O,1]}[br]=E4[/b]
3.変換と表現
[b]<振り返り>[/b][br][br]ちなみに、「SやSrはアフィン変換をしている」という人がいます。[br]どういうことでしょうか。[br][br]これまでは、変換とその表現である行列をあまり区別せずに、コトバを使ってきた。[br]振り返りを兼ねて、コトバの使い方の視点で変換と表現をざっと見てみよう。[br][br][b]「合同」変換[/b]というのがあります。[br]図形を合同な図形に移すことだね。[br]平行移動(ずらす)、回転移動(まわす)、対称移動(うらがえす)の3種類があるね。[br]これらの合成も、証明するまでもなく合同変換だ。[br][br]また、[br][b]「相似」変換[/b]というものがあります。[br]図形の形を変えず相似な図形に移すことだ。[br]拡大縮小(向きを変えずにスクリーンに映す)、相似回転(等角らせん)、対称移動の3種類があり、この組み合わせも相似変換だ。[br][br][b]合同でも相似でもない「平行投影」[/b]というものがあります。[br]平行光線によって影を作ることに相当しますよ。[br]ガラス窓の影が床に移る、空間内の図形を平面や軸上に[b]正射影[/b]するなどです。[br][color=#0000ff][b][size=150]辺の比は保存されます。平行も保存されます。[/size][/b][/color][br][br]さて、2つの平面E,E'があり、Eの点P(x,y)をE'の点P'(x',y')に移す変換で、[br][b]x’=ax+by+k[br]y'=cx+dy+l (ad-bc≠0)[br][/b][br]となるものをアフィン変換という。[br]これをベクトル行列方式で表すと[br][b]x’=Ax+p(Aの行列式が非ゼロで、pが並進)[/b][br]x、x’が3次元ならば、Aは3次の正方行列になり、[br]y、y’が4次元ならば、Aは4次の正方行列になる。[br]a,b,c,dがどうであれ、Aが正則だから常識的な世界です。これが[b]アフィン変換[/b]ですね。[br][br]また、[br][b]「射影」変換[/b]というものがありますね。[br]点光源によってスクリーンに影を作ることに相当しますね。[br]要するに、投影図法のことですね。[br]投影図では、直線は直線に移りますが、[b]平行関係は維持できません[/b]。[br][b]だから、辺の比もゆがみます。(複比は保存)[/b][br]しかし、だからこそ、平面図形の辺の比についての定理がからむおもしろい世界です。[br][br]さっきの[b]アフィン空間[/b]に1つの点(無限遠点)をくっつけ[b]射影空間[/b]を作ります。[br]これが、[b]同次座標[/b]だったのです。[br]つまり、ゼロベクトル以外の点を分類した点を射影空間の点といい、その点のあつまりを射影空間というのです。ゼロベクトル自体は不定を表す。[br][br]さっき作った行列S,Srは4次の同次座標を同次座標に変換する線形変換でした。[br]これは、「形式的」には「射影変換」です。[br]しかし、「意味的」には、[b]3次のアフィン空間の点を並進[/b]しているので、[br][b]「アフィン変換」を表す「表現」[/b]になっていますね。

Information: 同次座標を使って並進を行列のかけ算で表そう