齊次座標的理解

2021-07-11 19:53:14 字數 3343 閱讀 7286

一直對齊次座標這個概念的理解不夠徹底,只見大部分的書中說道「齊次座標在仿射變換中非常的方便」,然後就沒有了後文,今天在乙個叫做「三百年 重生」的部落格上看到一篇關於透視投影變換的**的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明:「齊次座標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行仿射(線性)幾何變換。」—— 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也是很有研究 的,要想成為一名專業的計算機 圖形學 的 學習者,除了知其然必須還得知其所以然。 這樣在遇到問題的時候才能迅速定位問題的根源,從而解決問題。
另乙個帖子的介紹:

問題: 兩條平行線會相交

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

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

在歐幾里得(或稱笛卡爾)空間裡描述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 平面的過程中就用到它了。

齊次座標的理解

一直對齊次座標這個概念的理解不夠徹底,只見大部分的書中說道 齊次座標在仿射變換中非常的方便 然後就沒有了後文,今天在乙個叫做 三百年 重生 的部落格上看到一篇關於透視投影變換的 的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明 齊次座標表示是計算機圖形學的重要手段之一,...

齊次座標的理解

一直對齊次座標這個概念的理解不夠徹底,只見大部分的書中說道 齊次座標在仿射變換中非常的方便 然後就沒有了後文,今天在乙個叫做 三百年 重生 的部落格上看到一篇關於透視投影變換的 的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明 齊次座標表示是計算機圖形學的重要手段之一,...

齊次座標的理解

在乙個叫做 三百年 重生 的部落格上看到一篇關於透視投影變換的 的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明 齊次座標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行 仿射 線性 幾何變換。f.s.hill,jr。下面是作者對齊次座...