線性代數(四) 仿射變換

齊次座標

對於向量而言, 平移操作是沒有意義的, 因爲向量只描述方向與大小, 與位置無關. 但是很明顯, 在計算機圖形學中, 我們不值關注方向, 同樣需要考慮物體(頂點)的位置信息. 齊次座標的重要作用就是使我們可以方便的將位置和向量進行統一表示.

我們將三維座標擴展爲四維座標, 第四維 w 則可以用來表示當前對象是點還是向量. 具體來講

  1. (x, y, z, 0) 表示向量
  2. (x, y, z, 1) 表示點

齊次座標表示法的思路:

  1. 兩點之差 qp=(qx,qy,qz,1)(px,py,pz,1)=(qxpx,qypy,qzpz,0){\mathbf q - \mathbf p = (q_x, q_y, q_z, 1) - (p_x, p_y, p_z, 1) = (q_x-p_x, q_y-p_y, q_z-p_z, 0)} 得到一個向量.
  2. 點與向量的和p+v=(px,py,pz,1)+(vx,vy,vz,0)=(px+vx,py+vy,pz+vz,1){\mathbf p + \mathbf v = (p_x, p_y, p_z, 1) + (v_x, v_y, v_z, 0) = (p_x+v_x, p_y+v_y, p_z+v_z, 1)}得到一個點.

接下來會說明: w = 1 可以使點內正確的平移, w = 0 則可以防止向量座標受到平移的影響.

仿射變換的定義及其矩陣表示

仿射變換是一個線性變換和一個平移向量的組合. 用矩陣表示如下:
α(u)=uA+b=[x,y,z][A00A01A02A10A11A12A20A21A22]+[bx,by,bz]=[x,y,z] {\alpha(u) = uA+b=[x,y,z] \begin{bmatrix} A_{00} & A_{01} & A_{02} \\ A_{10} & A_{11} & A_{12} \\ A_{20} & A_{21} & A_{22} \\ \end{bmatrix} + [b_x, b_y, b_z] = [x', y',z'] }

如果把他擴展爲齊次座標, 則可以更簡潔的寫作:
[x,y,z,1][A00A01A020A10A11A120A20A21A220bxbybz1]=[x,y,z,1] { [x, y, z, 1] \begin{bmatrix} A_{00} & A_{01} & A_{02} & 0 \\ A_{10} & A_{11} & A_{12} & 0 \\ A_{20} & A_{21} & A_{22} & 0 \\ b_x & b_y & b_z & 1\\ \end{bmatrix} = [x', y',z',1] }

可以看出, 加上向量 b 的這步運算, 從本質上來講是一個平移變換. 我們既不希望平移操作應用到向量上, 又希望向量受到仿射變換中線性部分的影響(旋轉和縮放). 這時, 根據仿射變換的矩陣表示和矩陣乘法的計算規則, 我們可以輕鬆的得出, 將第四分量 w 設置爲 0 便可以清除仿射變換中的平移部分並保留線性部分. 這一特徵便可以用來表示向量.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章