矩陣的線性變換可以分為:旋轉(zhuǎn),縮放,投影,鏡像,切變等。每一種線性變換對應(yīng)著相應(yīng)的矩陣。
旋轉(zhuǎn)
- 2D旋轉(zhuǎn):a為行向量,M為變換矩陣,b為變換后的向量。
??????????????aM=b
Paste_Image.png
Paste_Image.png
可以看見x軸的單位向量p(1,0)旋轉(zhuǎn)了θ角度以后變成了(cosθ,sinθ),y軸的單位向量q(0,1)旋轉(zhuǎn)了θ角度以后變?yōu)榱耍?sinθ,cosθ)。
那我們現(xiàn)在可以開始構(gòu)建我們的旋轉(zhuǎn)矩陣(2D):
第一行控制x軸的單位向量的旋轉(zhuǎn)(cosθ,sinθ)
第二行控制y軸的單位向量的旋轉(zhuǎn)(-sinθ,cosθ)
Paste_Image.png
如果是3D的旋轉(zhuǎn)呢?
這時我們就要區(qū)分是左手坐標(biāo)系,還是右手坐標(biāo)系了,因為不是的坐標(biāo)系旋轉(zhuǎn)的方向不是不同的,通過左手法則來判斷旋轉(zhuǎn)方向。(我們一般都是圍繞坐標(biāo)軸進行旋轉(zhuǎn))
Paste_Image.png
Paste_Image.png
這時我們?nèi)绻M行旋轉(zhuǎn)就要先判別是繞著哪一個坐標(biāo)系進行旋轉(zhuǎn)。
繞x軸進行3D旋轉(zhuǎn)
Paste_Image.png
Paste_Image.png
繞y軸進行3D旋轉(zhuǎn)
Paste_Image.png
Paste_Image.png
繞z軸進行3D旋轉(zhuǎn)
Paste_Image.png
Paste_Image.png
當(dāng)然你也可以繞任意軸旋轉(zhuǎn)(但計算量會相當(dāng)?shù)膹?fù)雜,計算機中最能理解的旋轉(zhuǎn)還是需要歐拉角進行旋轉(zhuǎn))
Paste_Image.png
我們?yōu)槭裁丛诔绦蛟O(shè)計中會使用坐標(biāo)軸旋轉(zhuǎn)而不使用任意軸旋轉(zhuǎn)呢?:
Paste_Image.png
以這個機器人為例,這個機器人由無數(shù)個點組成,當(dāng)我們需要旋轉(zhuǎn)它的時,如果每一個點都需要用這么復(fù)雜的公式來計算的話會非常的慢。
編程的實現(xiàn):
- 首先在頭文件中類的成員方法里定義一個方法代表旋轉(zhuǎn)的線性變換。
Paste_Image.png
- 接著在源文件中進行實現(xiàn)
- 由于會頻繁的使用到sin和cos我們這里在MathUtil頭文件中將它封裝好在進行使用。
Paste_Image.png
Paste_Image.png
Paste_Image.png