天天看點

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

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

 文章連結:

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

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

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

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

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

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

先在機關基向量處畫一個茶壺

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

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

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

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

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

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

在讨論具體的變換之前,還必須要搞清楚,我們到底要變換什麼。在這裡我們所提到的變換,其内容主要就兩個:變換物體和變換坐标系。

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

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

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

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

其實這兩種變換實際上是等價的,将物體變換一個量等價于将坐标系變換一個相反的量。

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

旋轉

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

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

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

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

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

在左手坐标系中定義此方向的規則為左手規則

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

左手坐标系

從哪裡看

正方向

負方向

從軸的負端點向正端點看

逆時針

順時針

從軸的正端點向負端點看

繞軸變換中最為常見的就是繞坐标軸旋轉

x軸

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

 可得到變換矩陣

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

同理得到y軸和z軸的變換公式

y軸

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

z軸

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

ps:對于任意軸的旋轉,可能等我們學完了平移,将任意軸平移旋轉至坐标軸變換後在移後即可。

縮放

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

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

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

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

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

2d中有兩個縮放因子,

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

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

。縮放矩陣為:

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

縮放執行個體

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

對于3d,需要增加第三個縮放因子

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

,3d縮放矩陣:

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

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

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

最簡單的投影方式是向坐标軸或平面投影。

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

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

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

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

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

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

正交投影效果圖

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

鏡像(反射)

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

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

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

在2d環境下,沿任意軸鏡像的矩陣為

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

其中向量n為任意軸方向的機關向量,例如如果任意軸為x軸,則n=(1,0),是以關于x軸的鏡像矩陣為

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

在3d環境下,沿任意軸鏡像的矩陣為

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

切變

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

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

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

切變的基本實作思想是,某一坐标的乘積加到另一個坐标上去:x‘ = x + sy。

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

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

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

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

3d坐标中的切變矩陣兩個坐标軸别另一個坐标軸改變的矩陣

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

                                                                      -end-

 參考文獻:(1)《3d math primer for graphics and game development》

                 (2)百度百科         

繼續閱讀