齊次座標

轉自http://blog.csdn.net/wqvbjhc/article/details/6003112

   一直對齊次座標這個概念的理解不夠徹底,只見大部分的書中說道“齊次座標在仿射變換中非常的方便”,然後就沒有了後文,今天在一個叫做“三百年 重生”的博客上看到一篇關於透視投影變換的探討的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明:“齊次座標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行仿射(線性)幾何變換。”—— 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 所說,仿射(線性)變換的進行 更加方便。由於圖形硬件已經普遍地支持齊次座標與矩陣乘法,因此更加促進了齊次座標使用,使得它似乎成爲圖形學中的一個標準。

 

    以上很好的闡釋了齊次座標的作用及運用齊次座標的好處。其實在圖形學的理論中,很多已經被封裝的好的API也是很有研究 的,要想成爲一名專業的計算機 圖形學 學習者,除了知其然必須還得知其所以然。 這樣在遇到問題的時候才能迅速定位問題的根源,從而解決問題。

 

 

另一個帖子的介紹: http://www.cnblogs.com/kesalin/archive/2009/09/09/homogeneous.html

問題: 兩條平行線會相交


鐵軌在無限遠處相交於一點

在歐幾里得幾何空間裏,兩條平行線永遠都不會相交。但是在投影空間中,如右圖中的兩條鐵軌在地平線處卻是會相交的,因爲在無限遠處它們看起來相交於一點。

在歐幾里得(或稱笛卡爾)空間裏描述2D/3D 幾何物體是很理想的,但在投影空間裏面卻並不見得。 我們用 (x, y )  表 示笛卡爾空間中的一個 2D 點,而處於無限遠處的點 (∞,∞) 在笛卡爾空間裏是沒有意義的。投影空間裏的兩條平行線會在無限遠處相交於一點,但笛卡爾空間裏面無法搞定這個問題(因爲無限遠處的點在笛卡爾空間裏是沒有 意義的),因此數學家想出齊次座標這個點子來了。

解決辦法: 其次座標

由 August Ferdinand Möbius 提出的齊次座標(Homogeneous coordinates)讓我們能夠在投影空間裏進行圖像和幾何處理,齊次座標用 N + 1個分量來描述 N 維座標。比如,2D 齊次座標是在笛卡爾座標(X, Y)的基礎上增加一個新分量 w,變成(x, y, w),其中笛卡爾座標系中的大X,Y 與齊次座標中的小x,y有如下對應關係:

X = x/w
Y = y/w


笛卡爾座標中的點 (1, 2) 在齊次座標中就是 (1, 2, 1) 。如果這點移動到無限遠(∞,∞)處,在齊次座標中就是 (1, 2, 0) ,這樣我們就避免了用沒意義的”∞” 來描述無限遠處的點。

爲什麼叫齊次座標?

前面提到,我們分別用齊次座標中的 x 和 y 除以 w 就得到笛卡爾座標中的 x 和 x,如圖所示:



仔細觀察下面的轉換例子,可以發現些有趣的東西:

上 圖中,點 (1, 2, 3), (2, 4, 6) 和 (4, 8, 12) 對應笛卡爾座標中的同一點 (1/3, 2/3)。 任意數量積的(1a, 2a, 3a) 始終對應於笛卡爾座標中的同一點 (1/3, 2/3)。因此這些點是“齊次”的,因爲他們始終對應於笛卡爾座標中的同一點。換句話說,齊次座標描述縮放不變性(scale invariant)。

證明: 兩平行線可以相交

笛卡爾座標系中,對於如下兩個直線方程:


如果 C ≠ D,以上方程組無解;如果 C = D,那這兩條線就是同一條線了。

下面我們用 x/w, y/w 代替 x, y 放到投影空間裏來求解:


現在我們就可以在 C ≠ D 的情況得到一組解 (x, y, 0),代入得  (C - D)w = 0,因爲 C ≠ D,所以 w = 0。因而,兩條平行線相交於投影空間中無限遠處的一點  (x, y, 0)。

齊次座標在計算機圖形學中是有用的,將 3D 場景投影到 2D 平面的過程中就用到它了。

發佈了34 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章