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