3D數學讀書筆記——矩陣基礎番外篇之線性變換

本系列文章由birdlove1987編寫,轉載請註明出處。  

 文章鏈接:http://blog.csdn.net/zhurui_idea/article/details/25102425

 

前面有一篇文章討論過多座標系的問題。有的人可能會問我那麼多座標系,它們之間怎麼關聯呢?嘿嘿~這次的內容可以爲解決這個問題打基礎奧!

 

線性變換基礎(3D數學編程中,形式轉換經常是錯誤的根源,所以這部分大家要多多思考,仔細運算)

一般來說,方陣(就是行和列都相等的矩陣)能描述任意的線性變換,所以後面我們一般用方陣來變換

其實簡單的說,線性變換就是保留直線和平行線,原點沒有移動,而其他的幾何性質,如長度、角度、面積和體積可能被改變

視覺的直觀角度上講,線性變換可能“拉伸”座標系,但不會“彎曲”和“卷折”座標系(畢竟是“線性”的變換嘛,不然可能就叫做曲線變換了)。

下面先引入一個直觀的變換例子

先在單位基向量處畫一個茶壺

 

然後我們給出一個變換矩陣

然後我們讓這個茶壺的座標按上面的矩陣經行變換

這個變換包含z軸順時針旋轉45°和不規則縮放

 

在討論具體的變換之前,還必須要搞清楚,我們到底要變換什麼。在這裏我們所提到的變換,其內容主要就兩個:變換物體變換座標系

變換物體,意味着變換物體上所有的點,這這點將被移動到一個新的位置,我們仍使用同一座標系來描述變換前和變換後的位置。

變換座標,意味着物體上的點實際沒有移動,我們只是在另外一個座標系中描述它的位置而已。

 

其實這兩種變換實際上是等價的,將物體變換一個量等價於將座標系變換一個相反的量

ps:下面我們實現的變換都是物體變換

 

旋轉

2D中繞原點旋轉的參數只有一個:角度θ,它描述了旋轉量。(逆時針旋轉經常被認爲是正方向,順時針方向時負方向

根據幾何知識我們可知旋轉矩陣應該爲

 

在3D場景中,一般都是繞軸旋轉,並且在繞軸旋轉θ°時,必須知道哪個方向別認爲“正”,哪個方向被認爲“負”。

在左手座標系中定義此方向的規則爲左手規則

 

 

左手座標系
從哪裏看 正方向 負方向
從軸的負端點向正端點看 逆時針 順時針
從軸的正端點向負端點看 順時針 逆時針

 

繞軸變換中最爲常見的就是繞座標軸旋轉

X軸

 

 可得到變換矩陣

同理得到Y軸和Z軸的變換公式

Y軸

Z軸

ps:對於任意軸的旋轉,可能等我們學完了平移,將任意軸平移旋轉至座標軸變換後在移後即可。

 

縮放

通過比例因子K按比例變大或縮小來縮放物體。

如果在各方向應用同比例的縮放,且沿原點“擴張”物體,那麼就是均勻縮放。(均勻縮放可以保持物體的角度和比例不變)

如果需要擠壓或拉伸物體,在不同方向應用不同的因子即可,這稱作非均勻縮放。(非均勻縮放時,物體角度將發生變化)

ps:如果 |k|<1 ,物體將變短,如果 |k|>1,物體變長。如果 |k|=0,就是正交投影。

最簡單的縮放方法是沿着每個座標軸應用單獨的縮放因子。

2D中有兩個縮放因子,。縮放矩陣爲:

縮放實例

對於3D,需要增加第三個縮放因子,3D縮放矩陣:

 

正交投影(平行投影)(投影意味着降維操作)

有一種投影方法是在某個方向上用零作爲縮放因子。這種情況下,所有點都被拉平至垂直的軸或平面上,這種投影稱作正交投影

最簡單的投影方式是向座標軸或平面投影。

在2D環境下,向 x 軸投影

    

在2D環境下,向 y 軸投影

 

在3D環境下,向 xy 平面投影、向xz平面投影和向yz平面投影的矩陣

正交投影效果圖

 

 

 

鏡像(反射)

鏡像是一種變換,起、其作用是將物體沿直線,或平面翻折。

ps:一個物體只能鏡像一次,如果再次鏡像物體將翻回正面,這和在原位置旋轉物體的效果一樣了。

在2D環境下,沿任意軸鏡像的矩陣爲

其中向量n爲任意軸方向的單位向量,例如如果任意軸爲x軸,則n=(1,0),所以關於x軸的鏡像矩陣爲

在3D環境下,沿任意軸鏡像的矩陣爲

 

 

切變

切變是一種座標系“扭曲”變換,非均勻地拉伸它。這是一種很少用到的變換,它也被稱扭曲變換

切變的時候角度會發生變化,但是令人驚奇的是面積體積保持不變

切變的基本實現思想是,某一座標的乘積加到另一個座標上去:x' = x + sy

 

在2D環境下,x座標根據座標y以參數s控制切變方向和向量的切變矩陣

  

在2D環境下,y座標根據座標x以參數s控制切變方向和向量的切變矩陣

3D座標中的切變矩陣兩個座標軸別另一個座標軸改變的矩陣

 

                                                                      -End-

 

 參考文獻:(1)《3D Math Primer for Graphics and Game Development》

                 (2)百度百科

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