矩陣的線性變換可以分為:旋轉,縮放毁葱,投影垫言,鏡像,切變等倾剿。每一種線性變換對應著相應的矩陣筷频。
旋轉
- 2D旋轉:a為行向量,M為變換矩陣柱告,b為變換后的向量截驮。
??????????????aM=b
可以看見x軸的單位向量p(1,0)旋轉了θ角度以后變成了(cosθ,sinθ)际度,y軸的單位向量q(0,1)旋轉了θ角度以后變?yōu)榱耍?sinθ葵袭,cosθ)。
那我們現在可以開始構建我們的旋轉矩陣(2D):
第一行控制x軸的單位向量的旋轉(cosθ乖菱,sinθ)
第二行控制y軸的單位向量的旋轉(-sinθ坡锡,cosθ)
如果是3D的旋轉呢?
這時我們就要區(qū)分是左手坐標系窒所,還是右手坐標系了鹉勒,因為不是的坐標系旋轉的方向不是不同的,通過左手法則來判斷旋轉方向吵取。(我們一般都是圍繞坐標軸進行旋轉)
這時我們如果要進行旋轉就要先判別是繞著哪一個坐標系進行旋轉禽额。
繞x軸進行3D旋轉
繞y軸進行3D旋轉
繞z軸進行3D旋轉
當然你也可以繞任意軸旋轉(但計算量會相當的復雜,計算機中最能理解的旋轉還是需要歐拉角進行旋轉)
我們?yōu)槭裁丛诔绦蛟O計中會使用坐標軸旋轉而不使用任意軸旋轉呢皮官?:
以這個機器人為例脯倒,這個機器人由無數個點組成,當我們需要旋轉它的時捺氢,如果每一個點都需要用這么復雜的公式來計算的話會非常的慢藻丢。
編程的實現:
- 首先在頭文件中類的成員方法里定義一個方法代表旋轉的線性變換。
- 接著在源文件中進行實現
- 由于會頻繁的使用到sin和cos我們這里在MathUtil頭文件中將它封裝好在進行使用摄乒。