問題:兩條平行線會相交於一點
在歐氏幾何空間,同一平面的兩條平行線不能相交,這是我們都熟悉的一種場景。
然而,在透視空間里面,兩條平行線可以相交,例如:火車軌道隨着我們的視線越來越窄,最后兩條平行線
在無窮遠處交於一點。

軌道在遠處相交於一點,但是現實中軌道是不可能相交的
因此在透視空間里,存在兩條平行線相交
歐氏空間(或者笛卡爾空間)描述2D/3D幾何非常適合,但是這種方法卻不適合處理透視空間的問題(實際
上,歐氏幾何是透視幾何的一個子集合),二維笛卡爾坐標可以表示為(x,y),三維(x,y,z)
如果一個點在無窮遠處,這個點的坐標將會(∞,∞),在歐氏空間,這變得沒有意義。平行線在透視空間的無窮
遠處交於一點,但是在歐氏空間卻不能,數學家發現了一種方式來解決這個問題。
方法:齊次坐標表示2D/3D坐標系
我們可以在一個2D笛卡爾坐標末尾加上一個額外的變量w來形成2D齊次坐標,因此,一個點(X,Y)在齊次坐標
里面變成了(x,y,w),並且有:X = x/w、Y = y/w
簡述:2D笛卡爾坐標(X,Y)、齊次坐標(x,y,w)
例如,笛卡爾坐標系下(1,2)的齊次坐標可以表示為(1,2,1),如果點(1,2)移動到無限遠處,在
笛卡爾坐標下它變為(∞,∞),然后它的齊次坐標表示為(1,2,0),因為(1/0, 2/0) = (∞,∞),我們可以不
用”∞"來表示一個無窮遠處的點了
PS:在齊次坐標中,不在使用笛卡爾坐標思維了,不然就無法理解它
齊次坐標轉笛卡爾坐標



轉化過程中……

你會發現(1, 2, 3), (2, 4, 6) 和(4, 8, 12)對應同一個歐氏幾何點 (1/3, 2/3),任何非零實數的乘積,例如(1a, 2a,
3a) 對應 笛卡爾空間里面的(1/3, 2/3) 。因此,這些點是“齊次的”,因為它代表了笛卡爾坐標系里面的同一個點
齊次點具有下列幾個性質:(齊次坐標比笛卡爾坐標多一維)
1)如果實數a非零,則(x, y, x, w)和(ax, ay, az, aw)表示同一個點,類似於x/y = (ax)/(ay)。
2)三維空間點(x, y, z)的齊次點坐標為(x, y, z, 1.0),二維平面點(x,y)的齊次坐標(x,y,0,1)。
3)當w不為零時,齊次點坐標(x, y, z, w)即三維空間點坐標(x/w, y/w, z/w);當w為零時,齊次
點(x, y, z, 0)表示此點位於某方向的無窮遠處。
引進齊次坐標優點
1.它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個坐標系變換到另一個坐標系
的有效方法。
2.它可以表示無窮遠的點。n+1維的齊次坐標中如果h=0,實際上就表示了n維空間的一個無窮遠點。
對於齊次坐標[a,b,h],保持a,b不變, 點沿直線 ax+by=0 逐漸走向無窮遠處的過程。
證明:兩條直線可以相交


我們知道在笛卡爾坐標系里面,該方程組無解,因為C ≠ D,如果C=D,兩條直線就相同了。
讓我們在透視空間里面,用齊次坐標x/w, y/w代替x ,y,

現在我們有一個解(x, y, 0),兩條直線相交於(x, y, 0),這個點在無窮遠處。

“齊次坐標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行仿射(線性)幾何變換。”—— F.S. Hill, JR。
對於一個向量v以及基oabc,可以找到一組坐標(v1,v2,v3),使得v = v1 a + v2 b + v3 c (1)
而對於一個點p,則可以找到一組坐標(p1,p2,p3),使得 p – o = p1 a + p2 b + p3 c (2)
從上面對向量和點的表達,我們可以看出為了在坐標系中表示一個點(如p),我們把點的位置看
作是對這個基的原點o所進行的一個位移,即一個向量——p – o(有的書中把這樣的向量叫做位置
向量——起始於坐標原點的特殊向量),我們在表達這個向量的同時用等價的方式表達出了
點p:p = o + p1 a + p2 b + p3 c (3)
(1)(3)是坐標系下表達一個向量和點的不同表達方式
這里可以看出,雖然都是用代數分量的形式表達向量和點,但表達一個點比一個向量需要額外
的信息。如果我寫出一個代數分量表達(1, 4, 7),誰知道它是個向量還是個點!
我們現在把(1)(3)寫成矩陣的形式:
v = (v1 v2 v3 0) X (a b c o)
p = (p1 p2 p3 1) X (a b c o)
這里(a,b,c,o)是坐標基矩陣,右邊的列向量分別是向量v和點p在基下的坐標。這樣,向量
和點在同一個基下就有了不同的表達:3D向量的第4個代數分量是0,而3D點的第4個代數
分量是1。像這種這種用4個代數分量表示3D幾何概念的方式是一種齊次坐標表示。
這樣,上面的(1, 4, 7)如果寫成(1,4,7,0),它就是個向量;如果是(1,4,7,1),它就是個點。
下面是如何在普通坐標(Ordinary Coordinate)和齊次坐標(Homogeneous Coordinate)之
間進行轉換:
(1)從普通坐標轉換成齊次坐標時
如果(x,y,z)是個點,則變為(x,y,z,1);
如果(x,y,z)是個向量,則變為(x,y,z,0)
(2)從齊次坐標轉換成普通坐標時
如果是(x,y,z,1),則知道它是個點,變成(x,y,z);
如果是(x,y,z,0),則知道它是個向量,仍然變成(x,y,z)
以上是通過齊次坐標來區分向量和點的方式。從中可以思考得知,對於平移T、旋轉R、
縮放S這3個最常見的仿射變換,平移變換只對於點才有意義,因為普通向量沒有位置
概念,只有大小和方向.
而旋轉和縮放對於向量和點都有意義,你可以用類似上面齊次表示來檢測。從中可以
看出,齊次坐標用於仿射變換非常方便。
此外,對於一個普通坐標的點P=(Px, Py, Pz),有對應的一族齊次坐標(wPx, wPy,wPz,
w),其中w不等於零。比如,P(1, 4, 7)的齊次坐標有(1, 4, 7, 1)、(2, 8, 14, 2)、
(-0.1, -0.4, -0.7, -0.1)等等。因此,如果把一個點從普通坐標變成齊次坐標,給x,y,z
乘上同一個非零數w,然后增加第4個分量w;如果把一個齊次坐標轉換成普通坐標,
把前三個坐標同時除以第4個坐標,然后去掉第4個分量。
由於齊次坐標使用了4個分量來表達3D概念,使得平移變換可以使用矩陣進行,從而如
F.S. Hill, JR所說,仿射(線性)變換的進行更加方便。由於圖形硬件已經普遍地支持
齊次坐標與矩陣乘法,因此更加促進了齊次坐標使用,使得它似乎成為圖形學中的一個標准。
分享一個有道鏈接:轉載於此,經過多次轉載,來源於網絡,供學習分享