矩陣的線性變換可以分為:旋轉(zhuǎn),縮放,投影,鏡像,切變等。每一種線性變換對(duì)應(yīng)著相應(yīng)的矩陣。
旋轉(zhuǎn)
- 2D旋轉(zhuǎn):a為行向量,M為變換矩陣,b為變換后的向量。
??????????????aM=b

Paste_Image.png

Paste_Image.png
可以看見(jiàn)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)呢?
這時(shí)我們就要區(qū)分是左手坐標(biāo)系,還是右手坐標(biāo)系了,因?yàn)椴皇堑淖鴺?biāo)系旋轉(zhuǎn)的方向不是不同的,通過(guò)左手法則來(lái)判斷旋轉(zhuǎn)方向。(我們一般都是圍繞坐標(biāo)軸進(jìn)行旋轉(zhuǎn))

Paste_Image.png

Paste_Image.png
這時(shí)我們?nèi)绻M(jìn)行旋轉(zhuǎn)就要先判別是繞著哪一個(gè)坐標(biāo)系進(jìn)行旋轉(zhuǎn)。
繞x軸進(jìn)行3D旋轉(zhuǎn)

Paste_Image.png

Paste_Image.png
繞y軸進(jìn)行3D旋轉(zhuǎn)

Paste_Image.png

Paste_Image.png
繞z軸進(jìn)行3D旋轉(zhuǎn)

Paste_Image.png

Paste_Image.png
當(dāng)然你也可以繞任意軸旋轉(zhuǎn)(但計(jì)算量會(huì)相當(dāng)?shù)膹?fù)雜,計(jì)算機(jī)中最能理解的旋轉(zhuǎn)還是需要?dú)W拉角進(jìn)行旋轉(zhuǎn))

Paste_Image.png
我們?yōu)槭裁丛诔绦蛟O(shè)計(jì)中會(huì)使用坐標(biāo)軸旋轉(zhuǎn)而不使用任意軸旋轉(zhuǎn)呢?:

Paste_Image.png
以這個(gè)機(jī)器人為例,這個(gè)機(jī)器人由無(wú)數(shù)個(gè)點(diǎn)組成,當(dāng)我們需要旋轉(zhuǎn)它的時(shí),如果每一個(gè)點(diǎn)都需要用這么復(fù)雜的公式來(lái)計(jì)算的話會(huì)非常的慢。
編程的實(shí)現(xiàn):
- 首先在頭文件中類的成員方法里定義一個(gè)方法代表旋轉(zhuǎn)的線性變換。

Paste_Image.png
- 接著在源文件中進(jìn)行實(shí)現(xiàn)
- 由于會(huì)頻繁的使用到sin和cos我們這里在MathUtil頭文件中將它封裝好在進(jìn)行使用。

Paste_Image.png

Paste_Image.png

Paste_Image.png