3D数学 ---- 矩阵和线性变换
包含平移的線性變換稱作仿射變換,3D中的仿射變換不能用 3 x 3 矩陣表達(dá),必須使用4 x 4矩陣。
一般來說,變換物體相當(dāng)于以相反的量變換描述這個物體的坐標(biāo)系。當(dāng)有多個變換時,則需要以相反的順序變換相反的量。例如,將物體順時針旋轉(zhuǎn)20度,擴(kuò)大200%,等價于將坐標(biāo)系縮小200%,再逆時針旋轉(zhuǎn)20度。
?
2D中的旋轉(zhuǎn)
在2D環(huán)境中,物體只能繞某個點旋轉(zhuǎn),因為現(xiàn)在暫不考慮平移。這里我們進(jìn)一步限制物體,使其只繞原點旋轉(zhuǎn)。2D中繞原點的旋轉(zhuǎn)只有一個參數(shù),角度θ,它描述了旋轉(zhuǎn)量。逆時針旋轉(zhuǎn)經(jīng)常(不是必須)被認(rèn)為是正方向,順時針方向是負(fù)方向。圖8.5展示了基向量p,q繞原點旋轉(zhuǎn),得到新的基向量p',q'。
現(xiàn)在我們知道了旋轉(zhuǎn)后基向量的值,就可以以公式8.1的形式構(gòu)造矩陣如下:
3D中繞坐標(biāo)軸的旋轉(zhuǎn)
在3D場景中,繞軸旋轉(zhuǎn)而不是點(此時軸指的是旋轉(zhuǎn)所繞的直線,不一定是笛卡爾坐標(biāo)軸x,y,z)。再次聲明,這里暫不考慮平移,所以只討論旋轉(zhuǎn)軸穿過原點的情況。
繞軸旋轉(zhuǎn)角度θ時,必須知道哪個方向被認(rèn)為“正”,哪個方向被認(rèn)為“負(fù)”,左手坐標(biāo)系中定義此方向的規(guī)則為左手法則。首先,要明確旋轉(zhuǎn)軸指向哪個方向。當(dāng)然,旋轉(zhuǎn)軸在理論上是無限延伸的,但我們還是要認(rèn)為它有正端點和負(fù)端點。與笛卡爾坐標(biāo)軸定義坐標(biāo)系相同,左手法則是這樣的:伸出左手,大拇指向上,其余手指彎曲。大拇指指向旋轉(zhuǎn)軸的正方向,此時,四指彎曲的方向就是旋轉(zhuǎn)的正方向。如圖8.6所示。
如果用的是右手坐標(biāo)系,也有類似的法則,不過是用右手代替左手,如圖8.7所示:
圖8.8顯示了另一種正方向的定義:
最為常見的旋轉(zhuǎn)是繞某坐標(biāo)軸的簡單旋轉(zhuǎn),讓我們從繞x軸旋轉(zhuǎn)開始,如圖8.9所示:
求出旋轉(zhuǎn)后的基向量,可以得到矩陣,見公式8.2。
Rotation about the y-axis is similar:
The matrix to rotate about the y-axis:
Finally, rotating about the z-axis:
?
3D中繞任意軸的旋轉(zhuǎn)
當(dāng)然也能繞3D中的任意軸旋轉(zhuǎn)。因為這里不考慮平移,可以假設(shè)旋轉(zhuǎn)軸通過原點,這種旋轉(zhuǎn)比繞坐標(biāo)軸的旋轉(zhuǎn)更復(fù)雜也更少見。用單位向量n描述旋轉(zhuǎn)軸,和前面一樣用θ描述旋轉(zhuǎn)量。
讓我們導(dǎo)出繞軸n旋轉(zhuǎn)角度θ的矩陣,也就是說,我們想得到滿足下面條件的矩陣?R(n, θ):
vR(n, θ) =?v'
v'是向量v繞軸n旋轉(zhuǎn)后的向量。讓我們看看能否用v,n和θ表示v'。我們的想法是在垂直于n的平面中解決這個問題,那么這就轉(zhuǎn)換為了一個簡單的2D問題。為了做到這一點,將v分解為兩個分量:v||和v⊥,分別平行于n和垂直于n,并有v?=?v|| + v⊥。因為v||平行于n,所以繞n旋轉(zhuǎn)不會影響它。故只要計算出v⊥繞n旋轉(zhuǎn)后的?v⊥',就能得到?v'?=v||?+?v⊥'。為了計算v⊥',我們構(gòu)造向量v||?,v⊥和臨時向量w,如圖8.12所示:
’
上圖展示了以下向量:
(1)v||?是v平行于n的分量,另一種說法就是v||?是v在n上的投影,用(v.n)n計算。
(2)v⊥是v垂直于n的分量,因為?v?=?v|| + v⊥,所以?v⊥?=?v?-?v||。v⊥是v投影到垂直于n的平面上的結(jié)果。
(3)w是同時垂直于v||和v⊥的向量,它的長度和v⊥的相同。w和v⊥同在垂直于n的平面中,w是v⊥繞n旋轉(zhuǎn)90度的結(jié)果,由n?x?v⊥可以得到。
現(xiàn)在,v'垂直于n的分量可以表示為:
總結(jié)
以上是生活随笔為你收集整理的3D数学 ---- 矩阵和线性变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MDK_main()代码执行过程分析
- 下一篇: 大数据组件图谱