Google ClassroomGoogle Classroom
GeoGebraGeoGebra Classroom

同次座標の本丸、射影幾何へ突入する

このページはマス旅の一部です。 これまでは、同次座標と手がかりにして、アフィン変換とアフィン平面までを扱ってきた。 今回は、いよいよ射影幾何を道具として利用するのではなく、正面からとらえてみよう。

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の補正をしてます。

同次座標の外積で交点、共線