變換矩陣
應(yīng)用
任意線性變換都可以用矩陣表示為易于計算的一致形式,并且多個變換也可以很容易地通過矩陣的相乘連接在一起。
線性變換不是唯一可以用矩陣表示的變換。R維的仿射變換與透視投影都可以用齊次坐標(biāo)表示為RP維(即n+1維的真實投影空間)的線性變換。因此,在三維計算機(jī)圖形學(xué)中大量使用著4x4的矩陣變換。
尋找變換矩陣
如果已經(jīng)有一個函數(shù)型的線性變換T(x){\displaystyle T(x)},那么通過T對標(biāo)準(zhǔn)基每個向量進(jìn)行簡單變換,然后將結(jié)果插入矩陣的列中,這樣很容易就可以確定變換矩陣A,即
例如,函數(shù)T(x)=5x{\displaystyle T(x)=5x}是線性變換,通過上面的過程得到(假設(shè)n = 2)
在二維圖形中的應(yīng)用示例
最為常用的幾何變換都是線性變換,這包括旋轉(zhuǎn)、縮放、切變、反射以及正投影。在二維空間中,線性變換可以用2×2的變換矩陣表示。
旋轉(zhuǎn)
繞原點逆時針旋轉(zhuǎn)θ度角的變換公式是x′=xcos? ? -->θ θ -->? ? -->ysin? ? -->θ θ -->{\displaystyle x"=x\cos \theta -y\sin \theta }與y′=xsin? ? -->θ θ -->+ycos? ? -->θ θ -->{\displaystyle y"=x\sin \theta +y\cos \theta },用矩陣表示為:
縮放
縮放(反矩陣)公式為x′=sx? ? -->x{\displaystyle x"=s_{x}\cdot x}與y′=sy? ? -->y{\displaystyle y"=s_{y}\cdot y},用矩陣表示為:
切變
切變有兩種可能的形式,平行于x軸的切變?yōu)閤′=x+ky{\displaystyle x"=x+ky}與y′=y{\displaystyle y"=y},矩陣表示為:
平行于y軸的切變?yōu)閤′=x{\displaystyle x"=x}與y′=y+kx{\displaystyle y"=y+kx},矩陣表示為:
反射
為了沿經(jīng)過原點的直線反射向量,假設(shè)(ux, uy)為直線方向的單位向量。變換矩陣為:
不經(jīng)過原點的直線的反射是仿射變換,而不是線性變換。
若一座標(biāo)(x, y)沿直線 y=(tanθ θ -->)x{\displaystyle y=(tan\theta )x} 進(jìn)行反射,則其影像(x", y")可用以下公式求得:
(x′y′)=(cos2θ θ -->sin2θ θ -->sin2θ θ -->? ? -->cos2θ θ -->)(xy){\displaystyle {\begin{pmatrix}x"\\y"\end{pmatrix}}={\begin{pmatrix}cos2\theta &sin2\theta \\sin2\theta &-cos2\theta \end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}
正投影
為了將向量正投影到一條經(jīng)過原點的直線,假設(shè)(ux, uy)是直線方向的單位向量,變換矩陣為:
同反射一樣,正投影到一條不經(jīng)過原點的直線的變換是仿射變換,而不是線性變換。
平行投影也是線性變換,也可以用矩陣表示。但是透視投影不是線性變換,必須用齊次坐標(biāo)表示。
組合變換與逆變換
用矩陣表示線性變換的一個主要動力就是可以很容易地進(jìn)行組合變換以及逆變換。
組合可以通過矩陣乘法來完成。如果A與B是兩個線性變換,那么對向量x先進(jìn)行A變換,然后進(jìn)行B變換的過程為:
換句話說,先A后B變換的組合等同于兩個矩陣乘積的變換。需要注意的是先A后B表示為BA而不是AB。
能夠通過兩個矩陣相乘將兩個變換組合在一起這樣的能力就使得可以通過逆矩陣進(jìn)行變換的逆變換。A表示A的逆變換。
變換矩陣并不都是可逆的,但通常都可以進(jìn)行直觀的解釋。在上一節(jié)中,幾乎所有的變換都是可逆的。只要sx{\displaystyle s_{x}}與sy{\displaystyle s_{y}}都不為零,那么縮放變換也是可逆的。另外,正投影永遠(yuǎn)是不可逆的。
其它類型的變換
仿射變換
為了表示仿射變換,需要使用齊次坐標(biāo),即用三維向量(x, y, 1)表示二維向量,對于高維來說也是如此。按照這種方法,就可以用矩陣乘法表示變換。x′=x+tx{\displaystyle x"=x+t_{x}}; y′=y+ty{\displaystyle y"=y+t_{y}}變?yōu)?/span>
在矩陣中增加一列與一行,除右下角的元素為1外其它部分填充為0,通過這種方法,所有的線性變換都可以轉(zhuǎn)換為仿射變換。例如,上面的旋轉(zhuǎn)矩陣變?yōu)?/span>
通過這種方法,使用與前面一樣的矩陣乘積可以將各種變換無縫地集成到一起。
當(dāng)使用仿射變換時,齊次坐標(biāo)向量w從來不變,這樣可以把它當(dāng)作為1。但是,透視投影中并不是這樣。
透視投影
三維計算機(jī)圖形學(xué)中另外一種重要的變換是透視投影。與平行投影沿著平行線將物體投影到圖像平面上不同,透視投影按照從投影中心這一點發(fā)出的直線將物體投影到圖像平面。這就意味著距離投影中心越遠(yuǎn)投影越小,距離越近投影越大。
最簡單的透視投影將投影中心作為坐標(biāo)原點,z = 1作為圖像平面,這樣投影變換為x′=x/z{\displaystyle x"=x/z}; y′=y/z{\displaystyle y"=y/z},用齊次坐標(biāo)表示為:
(這個乘法的計算結(jié)果是(xc,yc,zc,wc){\displaystyle (x_{c},y_{c},z_{c},w_{c})} = (x,y,z,z){\displaystyle (x,y,z,z)}。)
在進(jìn)行乘法計算之后,通常齊次元素wc并不為1,所以為了映射回真實平面需要進(jìn)行齊次除法,即每個元素都除以wc:
更加復(fù)雜的透視投影可以是與旋轉(zhuǎn)、縮放、平移、切變等組合在一起對圖像進(jìn)行變換。
參見
三維投影
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
- 有價值
- 一般般
- 沒價值
{{item.userName}} 舉報
{{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報
{{_reply.time}}