矩陣旋轉、歐拉角旋轉、四元數旋轉的優缺點


一、矩陣旋轉:
優點:旋轉軸可以是任意向量
缺點:旋轉其實只需要知道一個向量+一個角度(共4個信息值),但矩陣卻用了16個元素(矩陣法消耗時間和內存)

二、歐拉角旋轉
優點:容易理解,形象直觀;表示更方便,只需要三個值(分別對應x、y、z軸的旋轉角度)
缺點:歐拉角這種方法是要按照一個固定的坐標軸的順序旋轉的,因此不同的順序會造成不同結果;歐拉角旋轉會造成萬向鎖現象,這種現象的發生就是由於上述固定的坐標軸旋轉順序造成的。理論上,歐拉角旋轉可以靠這種順序讓一個物體旋轉到任何一個想要的方向,但如果在旋轉中不幸讓某些坐標軸重合,就會發生萬向鎖現象,這時就會丟失一個方向上的旋轉能力(兩個旋轉軸(環)重疊),也就是說在這種狀態下,我們無論怎么旋轉(還是按照原先的旋轉順序),都不可能得到某些想要的結果,除非打破原先的旋轉順序或者同時旋轉三個軸。
由於萬向鎖的存在,歐拉旋轉無法實現球面平滑插值。
萬向鎖的簡單解決辦法:構造一個不同的旋轉層級順序,但是萬向鎖總是會在某一個順序發生,調整旋轉順序不是根本解決辦法。(Unity使用的是Z-X-Y順規,即旋轉順序為z軸、x軸、y軸,雖然某些情況下會出現萬向鎖,但是這種順規出現萬向鎖的概率最小)
萬向鎖解決辦法:將歐拉角轉換為四元數,對四元數進行Slerp插值,再將這一系列四元數轉換為對應的歐拉角,然后作用於需要進行旋轉的對象。這種做法缺點在於消耗內存,但是可以使物體任意旋轉,靈活度高。
使用歐拉旋轉出現旋轉路徑偏移的根本原因:在萬向鎖情況下對歐拉角的插值不是線性的。(突變)
靜態歐拉角:其旋轉軸使用的是靜止不同的參考系。
動態歐拉角:使用object本身的坐標系,因而會隨着object旋轉而旋轉。(局部坐標系會隨着對象的旋轉而旋轉)

三、四元數旋轉
優點:可以避免萬向鎖;只需要一個4維的四元數就可以執行繞任意過原點的向量的旋轉,方便快捷,在某些實現下比旋轉矩陣效率更高;而且四元數旋轉可以提供平滑插值。
缺點:比歐拉旋轉稍微復雜了一點,因為多了一個維度,理解更困難,不直觀。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM