同次座標の本丸、射影幾何へ突入する
このページはマス旅の一部です。
これまでは、同次座標と手がかりにして、アフィン変換とアフィン平面までを扱ってきた。
今回は、いよいよ射影幾何を道具として利用するのではなく、正面からとらえてみよう。
1.アフィンを足場にして射影のイメージをつかもう
<アフィンの思い起こし>
アフィン平面は有限体Fq={0,1,..,q-1}の直積でq^2個の点があり、
q×(q+1)本の直線が引けました。
y軸以外で原点を通るy=mxの傾きmを0~q-1のq通り変えられる。
次に、y=mx+cのcを0からq-1まで変えることでq本ずつの平行線の束ができた。
1つの束がラテン方陣1つに対応した。
y軸も入れると傾きはq+1通りある。
<射影は点線が双対>
傾きの違いも入れると、無限遠点は区別できることが
射影空間の原点が不定であることとのちがいだった。
このアフィン平面を射影空間に拡張するとどうなるだろう。
q^2個の点に、直線の向きq+1通りのそれぞに無限遠点が追加されて、
点の数はq^2+q+1個になるね。
では、直線はどうなるだろうか。
アフィンでは、q(q+1)=q^2+q(本)だった。
しかし、無限遠点を通るだけをつなぐ1本の直線が追加されて、
直線の数はq^2+q+1本だ。
おもしろいね。
点と直線が数の上では対等になった。
たとえば、
F2={0,1}を土台にした射影空間はどうなるだろう。
2(2+1)+1=7。
点も直線も7ピッタになる。
もとのアフィンでは
p0(0,0),p1(0,1),p2(1,0),p3(1,1)の4点
L01:0y-x=0(mod 2) {(0,0),(0,1)}
L02:y-0x=0(mod 2) {(0,0),(1,0)}
L03:y-1x=0(mod 2) {(0,0),(1,1)}
L23:0y-x=1(mod 2) {(1,0),(1,1)}
L13:y-0x=1(mod 2) {(0,1),(1,1)}
L12:2y-1x=1(mod 2) {(0,1),(1,0)}の6本
これが射影では
p0[0,0,1],p1[0,1,1],p2[1,0,1],p3[1,1,1]に、
無限遠点が3点(p1∞[0,1,0],p2∞[1,0,0],p3∞[1,1,0])追加されて7点となる。
L01:0y-x=0(mod 2) {[0,0,1],[0,1,1],[0,1,0]}
L02:y-0x=0(mod 2) {[0,0,1],[1,0,1],[1,0,0]}
L03:y-1x=0(mod 2) {[0,0,1],[1,1,1],[1,1,0]}
L23:0y-x=1(mod 2) {[1,0,1],[1,1,1],[0,1,0]}
L13:y-0x=1(mod 2) {[0,1,1],[1,1,1],[1,0,0]}
L12:y-1x=1(mod 2){[0,1,1],[1,0,1],[1,1,0]}の6本の他に
L∞: {[0,1,0],[1,0,0],[1,1,0]}があり7本となる。
アフィン平面では
異なる2つの点を通る共通線は1本だけある。
異なる2つの線を通る共通点は0か1個。
射影空間ではどうだろう。
異なる2つの点を通る共通線は1本だけある。
L01とL23は無限遠点[0,1,0]で交わるため平行線はない。
異なる2つの線を通る共通点は1個だけある。
平行だと思っていたものが交わるということは異様に見えるが、
日常の景色でも鉄道のレールが遠くの方で交わって見えたりするし、
透視図法では平行線はなく、平行に見えるのは遠くが画面に入らないだけ。
それに、むしろ、個数だけでなく、
「直線と点のコトバを入れ替えても成り立ってしまう」
という、美しい双対性に気づくでしょう。
そう考えると、日常見える景色の構造を美しく抜き出したともいえる。
これが「射影」空間だ。
2.射影幾何の双対性を表現から探ろう
<同次座標は点と直線の両方にある>
アフィン平面に無限遠点をくっつけただけだから
、平面といえば平面だけど、次元が3になるので、なんとなく、射影「空間」と言ってきた。
しかし、通常は射影「平面」という。
なぜか。
次元が3に増えたとはいっても、3次元空間R ^3(または F_q^3)における原点を通る1次元直線を射影平面の「点」とみなし、原点を通る2次元平面を射影平面の「直線」とみなしているからですね。
つまり、「3次元射影平面PG(2)」は
3次元ではあっても意味的には平面、
「表示は3次元で、自由度は2次元」
なのですね。
アフィン平面の点X(x1,x2)に
無限遠点を追加して
X=[x1,x2,1]t=[p1,p2,p3](連比p1:p2:p3)
p3=t,p1=x1t,p2=x2tのように、3つの次元を対等にかく。ふつうは「,」ではなく「:」で区切る。
tが0以外で自由に変化できるため、「同次座標は、座標というよりは連比でしかない」が、
角カッコで閉じることで、普通の数値ではなく比であることをアピールすることにします。
同じように、アフィン平面では、直線の式をy=mx+cとか、ax+by+c=0とかいてきたけれど、
射影平面の直線の式は、「ax1+bx2+cx3=0」
のように3つの次元を対等にかく。
ax1+bx2+cx3=0。
これはベクトルn=[a,b,c]とベクトルX=[x1,x2,x3]の内積がゼロであるという式だともいえる。
ただし、nはゼロベクトルではない。
このとき、n=[a,b,c]を直線の同次座標という。
<内積での双対性>
さて、
点X=[x1,x2,x3]に直線x=[x1,x2,x3]を対応させ、
直線n=[a,b,c]に点N=[a,b,c]を対応させるとき、
「点Xが直線n上にある条件」と、「直線xが点Nを通る条件」が
同じax1+bx2+cx3=0、つまり、「点と直線のベクトルの内積=0」
で表すことができる。
さっきのF2={[0],[1]}(mod 2)からの
射影平面PG(2,q)の直線の式を同次座標でかいてみよう。
L01:1x+0y+0z=0 {[0,0,1],[0,1,1],[0,1,0]}
L02:0x+1y+0z=0 {[0,0,1],[1,0,1],[1,0,0]}
L03:1x+1y+0z=0 {[0,0,1],[1,1,1],[1,1,0]}
L23:1x+0y+1z=0 {[1,0,1],[1,1,1],[0,1,0]}
L13:0x+1y+1z=0 {[0,1,1],[1,1,1],[1,0,0]}
L12:1x+1y+1z=0 {[0,1,1],[1,0,1],[1,1,0]}
L∞:0x+0y+1z=0 {[0,1,0],[1,0,0],[1,1,0]}の7本の式ができるね。
3つの次元が対等になり、見た目も扱いやすさもシンプルになるね。
<外積でも双対性>
点Pが2直線L1、L2の交点だとしたら、
点PがL1と直交し、点PがL2と直交します。
言い換えると、PはL1とL2と直交するベクトルです。
2つのベクトルに直交するベクトルは外積で求められました。
だから、
P=L1×L2ですね。
また、
直線Lが2点P1、P2を通るとしたら、
LとP1が直交し、LとP2が直交します。
2つのベクトルに直交するベクトルは外積で求められますから、
L=P1×P2です。
外積でも点と直線が入れ替えられましたね。
おもしろいですね。
面白い以上の成果があります。
2つの3次元ベクトルP=[p,q,r],S=[s,t,u]の
外積P×S=
[det({{q,r},{t,u}}),-det({p,r},{s,u}),det({p,q},{s,t}})
で計算できたから、
2点P,Sを通る直線の法線ベクトル=P×S=(a,b,c)を求めて、
直線の方程式ax+by+cz=0が出せるということです。
逆に、2直線P,Sの交点P×S=(a,b,c)を求めることができます。
ちょっと確かめてみましょう。
F2ベースのPG(2,2)の7点
p0[0,0,1],p1[0,1,1],p2[1,0,1],p3[1,1,1],
p1∞[0,1,0],p2∞[1,0,0],p3∞[1,1,0]と7直線、
L01:1x+0y+0z=0 {[0,0,1],[0,1,1],[0,1,0]}
L02:0x+1y+0z=0 {[0,0,1],[1,0,1],[1,0,0]}
L03:1x+1y+0z=0 {[0,0,1],[1,1,1],[1,1,0]}
L23:1x+0y+1z=0 {[1,0,1],[1,1,1],[0,1,0]}
L13:0x+1y+1z=0 {[0,1,1],[1,1,1],[1,0,0]}
L12:1x+1y+1z=0 {[0,1,1],[1,0,1],[1,1,0]}
L∞:0x+0y+1z=0 {[0,1,0],[1,0,0],[1,1,0]}の7本
L01[1,0,0]とL23[1,0,1]の交点は
[1,0,0]×[1,0,1]=[0,1,0]の無限遠点になります。
p1∞[0,1,0]とp2∞[1,0,0]の共線は
[0,1,0]×[1,0,0]=[0,0,1]で、0x+0y+1zになります。
さっきの推理が外積計算で検証されましたね。
<振り返り>
課題:geogebraのベクトルの外積を使って交点、共線を求めよう。
geogebraのマニュアルによると、ベクトルどうしリストどうしの外積ができるそうです。コマンドはクロスです。
タイトルは「同次座標の外積で交点、共線」
p0={0,0,1}
p1={0,1,1}
p2={1,0,1}
p3={1,1,1}
p1i={0,1,0}
p2i={1,0,0}
p3i={1,1,0}
text1="p0="+p0+", p1="+p1+",p2="+p2+",p3="+p3+",p1i="+p1i+",p2i="+p2i+",p3i="+p3i+""
l01={1,0,0}
l02={0,1,0}
l03={1,1,0}
l23={1,0,1}
l13={0,1,1}
l12={1,1,1}
li={0,0,1}
text2="l01="+l01+", l02="+l02+",l03="+l03+",l23="+l23+",l13="+l13+",l12="+l12+",li="+li+""
pnt1={p0,p1,p2,p3,p1i,p2i,p3i}
pnt2={p0,p1,p2,p3,p1i,p2i,p3i}
Pname={"p0","p1","p2","p3","p1i","p2i","p3i"}
line1={l01,l02,l03,l23,l13,l12,li}
line2={l01,l02,l03,l23,l13,l12,li}
Lname={"l01","l02","l03","l23","l13","l12","li"}
a=slider(1,Length(pnt1),1)
b=slider(1,Length(pnt1),1)
Lres=Cross(Element(pnt1,a), Element(pnt2,b))
Lfix={Mod(Lres(1)+2,2),Mod(Lres(2)+2,2),Mod(Lres(3)+2,2)}
Lindx=IndexOf(Lfix, line1)
text3="点"+Element(Pname,a) +"と点"+Element(Pname,b)+"を通る線は"+Element(Lname,Lindx)+""
c=slider(1,Length(line1),1)
d=slider(1,Length(line1),1)
Pres=Cross(Element(line1,c), Element(line2,d)
Pfix={Mod(Pres(1)+2,2),Mod(Pres(2)+2,2),Mod(Pres(3)+2,2)}
Pindx=IndexOf(Pfix, pnt1)
text4="直線"+Element(Lname,c) +"と直線"+Element(Lname,d)+"の交点は"+Element(Pname,Pindx)+""
text5="点X=[x,y,z]"
text6="直線の法線N=[a,b,c]"
text7="X・N=ax+by+cz=0"
スライダーa,bの見出しは点、スライダーc、dの見出しは直線にしよう。
そして、意図をもって
オブジェクトを適当に並べてみてください。
Lfix,Pfixは、外積だけだと負の数になってしまうことがあるので、
答えにあるベクトルを探し損ねるることをさけるためmod 2の補正をしてます。