對於剛體的運動,除了旋轉外還有平移。在機器人及自動駕駛中,經常用齊次變換矩陣將旋轉和平移進行統一。
「齊次坐標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行仿射(線性)幾何變換。」—— F.S. Hill, JR
齊次坐標就是將一個原本n維的向量用一個n+1維的向量來表示,是指一個用於投影幾何裡的坐標系統,如同用於歐氏幾何裡的笛卡兒坐標一般。
對於一個向量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)× (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)
3*3矩陣可以用來旋轉,縮放坐標系,但不能移動坐標系;
需要在4維空間切變實現3維平移(比較容易理解的是在3維空間實現2維平移)
而4*4平移矩陣不會影響旋轉,縮放功能,所以4*4矩陣能包含旋轉,縮放,平移坐標系功能;
4D向量中w分量能「開關」4*4矩陣的平移部分,有些向量代表位置,應當平移,有些向量代表方向(如表面法向量),從幾何意義上說,第一類數據當作點,第二類當作向量;