Homogeneous Coordinates(齐次坐标)
Problem: Two parallel lines can intersect.
問題: 兩條平行線會相交?
?
鐵軌在無限遠處相交于一點Problem: Two parallel lines can intersect.
在歐幾里得(或稱笛卡爾)空間里描述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。
對于一個向量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也是很有研究的,要想成為一名專業的計算機圖形學的學習者,除了知其然必須還得知其所以然。這樣在遇到問題的時候才能迅速定位問題的根源,從而解決問題。
頂
轉載于:https://www.cnblogs.com/relievedliu/p/7366964.html
總結
以上是生活随笔為你收集整理的Homogeneous Coordinates(齐次坐标)的全部內容,希望文章能夠幫你解決所遇到的問題。