圖形學中座標點和座標系的變換
關於這方面之前看了好2次,雖然內容很簡單,但是每次看了就忘了,只有大概的印象。等到下次做什麼東西的時候需要用到座標變換,又要把書重新看一遍。所以這次打算把看的東西記下來,以後找起來方便。
參考書 Computer Graphics OpenGL 版本,3rd Edition
************************************ 齊次座標
齊次座標的意義:如果沒有齊次座標,對於任何一個點(x,y,z)和向量(x,y,z),我們是無法區分的。如果把非齊次座標的形式直接應用到演算法裡面,程式設計過程中要區分二者不是不可以,但是很麻煩。 但是一旦有了齊次座標,我們就可以很容易區分二者了
齊次座標的引入:為了區分一個tuple到底是點還是向量,我們可以這樣看。假設座標系C基向量為 i,j,k,原點為 。那麼一個向量
. (1)
如果這個向量的起點為原點,終點為P,那麼
所以
(2)
把上面(1)(2)寫成矩陣形式就是
其中(x,y,z,0)就是向量v在座標系C下的座標。(x,y,z,1)就是點P在座標系C下的座標。
注意:
1. 如果要把基向量i,j,k的座標和原點 的座標找到,則還需要定義一個參考座標系R,在R裡面去量化 i,j,k, ;否則它們只能用符號表示。
2. 在齊次座標下,向量的任何線性組合都有意義,都是向量。 但是點只有放射組合才有意義,才是點。 一個點和起始於該點的向量的線性組合是一個線性插值。
********************************* 仿射變換
放射變換一般形式:
仿射變換的一個性質是 (M*P,M*P2,...,M*Pn) = M*(P1,P2,...,Pn),這個性質帶來的好處就是,對目標圖形的一批點,我們只需要計算一次變換矩陣M,而不是對每一個點都算!
1. 平移
2. 縮放
3. 錯切
形式太多,略
4. 旋轉
繞x軸,pitch
繞y軸,yaw
繞z軸,roll
其中,c=cos( ), s=sin( )
定理:一個點繞過原點的軸u 旋轉等價於分別繞x y z軸旋轉特定的角度。
由該定理可以得到繞u軸旋轉角度的一步變換矩陣:
其中,c=cos, s=sin,x y z是u向量的座標
5. 連續的進行放射變換 M1,M2,M3,。。。Mn,最後的變換矩陣為:
6. 把新的點變回原來的點,變換矩陣為M的逆
*************************************** 座標系變換
1. 先考慮上面仿射變換矩陣M。設
其中,mi 是M的各個列向量
如果我們設在一個參考座標系R下,該座標系C的基向量 i,j,k 是單位正交基,並且原點=(0, 0, 0 | 1)^T,那麼把M本別作用於向量 i,j,k (其次座標表示的),得到
m1=M*i m2=M*jm3=M*k m4=M*
從而新座標系的基向量為 m1 m2 m3 m4。如果Q=MP,那麼Q=(m1, m2, m3, m4)*(Px, Py, Pz, 1)^T,原來在新座標系下,Q的座標值等於P !!!! exciting
再仔細看m1~m3,除了錯切,其餘三種得到的m1~m3保持原基向量組的正交性!
2. 下面考慮一般的座標變換。
設 仿射變換為T, 由原座標系C和變換T 得到新座標系C‘
其中 新舊座標系的基向量和原點座標均在一個參考座標系R下刻畫。如果我們在參考系R下找一個點P,那麼分別在座標系C和座標系C’ 下,同一個點P的座標值是不同的。因為度量標準(座標系)不同。
設P在C下的座標為(a,b,c,1),在C‘ 下座標為(a’,b‘,c’,1),所以
所以,即
因為i 非零向量,所以 a=T*a‘。同理可得其他分量的關係,從而
注意到T是仿射變換,所以T的第四行是(0,0,0,1),所以上式第四個等式是成立的。
3. 連續的座標變換 T1,T2,。。。Tn 後,最後的變換矩陣為
4. 從新座標變回舊座標,變換矩陣為T的逆矩陣。