1. 程式人生 > >3分鐘理解齊次座標系

3分鐘理解齊次座標系

本文用於初學者學習齊次座標系。博主也是通過這篇文章學習的,認為該文章通俗易懂,並且非常形象,所以轉載,供各位讀者觀看,同時以防博主遺忘知識點。
下面開始進入正題:

http://blog.csdn.net/janestar/article/details/44244849


齊次座標在電腦圖形內無處不在,因為該座標允許平移、旋轉、縮放透視投影等可表示為矩陣與向量相乘的一般向量運算。依據鏈式法則,任何此類運算的序列均可相乘為單一個矩陣,從而實現簡單且有效之處理。與此相反,若使用笛卡兒座標,平移及透視投影不能表示成矩陣相乘,雖然其他的運算可以。現在的OpenGL及Direct3D圖形卡均利用齊次座標的優點,以具4個暫存器的向量處理器來實作頂點著色引擎。


引進齊次座標有什麼必要,它有什麼優點呢? 許多圖形應用涉及到幾何變換,主要包括平移、旋轉、縮放。以矩陣表示式來計算這些變換時,平移是矩陣相加,旋轉和縮放則是矩陣相乘,綜合起來可以表示為p' = m1*p+ m2(注:因為習慣的原因,實際使用時一般使用變化矩陣左乘向量)(m1旋轉縮放矩陣, m2為平移矩陣, p為原向量 ,p'為變換後的向量)。引入齊次座標的目的主要是合併矩陣運算中的乘法和加法,表示為p' = p*M的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個座標系變換到另一個座標系的有效方法。 其次,它可以表示無窮遠的點。

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

歐氏空間(或者笛卡爾空間)描述2D/3D幾何非常適合,但是這種方法卻不適合處理透視空間的問題(實際上,歐氏幾何是透視幾何的一個子集合),2維笛卡爾座標可以表示為(x,y)。

如果一個點在無窮遠處,這個點的座標將會(∞,∞),在歐氏空間,這變得沒有意義。平行線在透視空間的無窮遠處交於一點,但是在歐氏空間卻不能,數學家發現了一種方式來解決這個問題。

方法:齊次座標
簡而言之,齊次座標就是用N+1維來代表N維座標



我們可以在一個2D笛卡爾座標末尾加上一個額外的變數w來形成2D齊次座標,因此,一個點(X,Y)在齊次座標裡面變成了(x,y,w),並且有

X = x/w

Y = y/w

例如,笛卡爾座標系下(1,2)的齊次座標可以表示為(1,2,1),如果點(1,2)移動到無限遠處,在笛卡爾座標下它變為(∞,∞),然後它的齊次座標表示為(1,2,0),因為(1/0, 2/0) = (∞,∞),我們可以不用”∞"來表示一個無窮遠處的點了,哈哈。

為什麼叫齊次座標?

我們把齊次座標轉化為笛卡爾座標的方法是前面n-1個座標分量分別除以最後一個分量即可。







轉化齊次座標到笛卡爾座標的過程中,我們有一個發現,例如:





你會發現(1, 2, 3), (2, 4, 6) 和(4, 8, 12)對應同一個Euclidean point (1/3, 2/3),任何標量的乘積,例如(1a, 2a, 3a) 對應 笛卡爾空間裡面的(1/3, 2/3) 。因此,這些點是“齊次的”,因為他們代表了笛卡爾座標系裡面的同一個點。換句話說,齊次座標有規模不變性。

證明:兩條直線可以相交

考慮如下方程組:




我們知道在笛卡爾座標系裡面,該方程組無解,因為C ≠ D,如果C=D,兩條直線就相同了。

讓我們在透視空間裡面,用齊次座標x/w, y/w代替x ,y,




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

小結:齊次座標在圖形學中是一個非常基礎的概念,例如3D場景對映到2D場景的過程中

參考: http://www.songho.ca/math/homogeneous/homogeneous.html

參考:https://baike.baidu.com/item/%E9%BD%90%E6%AC%A1%E5%9D%90%E6%A0%87/511284?fr=aladdin