????????以下對齊次坐標的解釋,主要參考在其他博客看到的,非原創(chuàng),個人覺得解釋的淺顯易懂,有助于初學(xué)者對齊次坐標的理解。
對于一個向量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),
點可以看作是對這個基的原點o所進行的一個位移,即一個向量——p – o(有的書中把這樣的向量叫做位置向量——起始于坐標原點的特殊向量),我們在表達這個向量的同時用等價的方式表達出了點p:p?=?o?+ p1?a +?p2?b?+ p3?c (3)
?(1)(3)是坐標系下表達一個向量和點的不同表達方式。這里可以看出,雖然都是用代數(shù)分量的形式表達向量和點,但表達一個點比一個向量需要額外的信息。
例如,寫出一個代數(shù)分量表達(1, 4, 7),誰知道它是個向量還是個點!
?我們現(xiàn)在把(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個代數(shù)分量是0,而3D點的第4個代數(shù)分量是1。像這種這種用4個代數(shù)分量表示3D幾何概念的方式是一種齊次坐標表示。
這樣,上面的(1, 4, 7)如果寫成(1,4,7,0),它就是個向量;如果是(1,4,7,1),它就是個點。
下面是普通坐標(Ordinary Coordinate)和齊次坐標(Homogeneous Coordinate)之間的轉(zhuǎn)換:
(1)從普通坐標轉(zhuǎn)換成齊次坐標時
?如果(x,y,z)是個點,則變?yōu)?x,y,z,1);
?如果(x,y,z)是個向量,則變?yōu)?x,y,z,0)
(2)從齊次坐標轉(zhuǎn)換成普通坐標時???
?如果是(x,y,z,1),則知道它是個點,變成(x,y,z);
?如果是(x,y,z,0),則知道它是個向量,仍然變成(x,y,z)
以上是通過齊次坐標來區(qū)分向量和點的方式。從中可以思考得知,對于平移T、旋轉(zhuǎn)R、縮放S這3個最常見的仿射變換,平移變換只對于點才有意義,因為普通向量沒有位置概念,只有大小和方向.
而旋轉(zhuǎn)和縮放對于向量和點都有意義,你可以用類似上面齊次表示來檢測。從中可以看出,齊次坐標用于仿射變換非常方便。
此外,對于一個普通坐標的點P=(Px, Py, Pz),有對應(yīng)的一族齊次坐標(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乘上同一個非零數(shù)w,然后增加第4個分量w;如果把一個齊次坐標轉(zhuǎn)換成普通坐標,把前三個坐標同時除以第4個坐標,然后去掉第4個分量。
由于齊次坐標使用了4個分量來表達3D概念,使得平移變換可以使用矩陣進行,從而如F.S. Hill, JR所說,仿射(線性)變換的進行更加方便。由于圖形硬件已經(jīng)普遍地支持齊次坐標與矩陣乘法,因此更加促進了齊次坐標使用,使得它似乎成為圖形學(xué)中的一個標準。
???以上很好的闡釋了齊次坐標的作用及運用齊次坐標的好處。