旋轉矩陣 尤拉角 四元數比較
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
旋轉矩陣、尤拉角、四元數主要用於:
向量的旋轉、座標系之間的轉換、角位移計算、方位的平滑插值計算
各方法比較
任務/性質 |
旋轉矩陣 |
尤拉角 |
四元數 |
在座標系間(物體和慣性)旋轉點 |
能 |
不能(必須轉換到矩陣) |
不能(必須轉換到矩陣) |
連線或增量旋轉 |
能,但經常比四元數慢,小心矩陣蠕變的情況 |
不能 |
能,比矩陣快 |
插值 |
基本上不能 |
能,但可能遭遇萬向鎖或其他問題 |
Slerp提供了平滑插值 |
易用程度 |
難 |
易 |
難 |
在記憶體或檔案中儲存 |
9個數 |
3個數 |
4個數 |
對給定方位的表達方式是否唯一 |
是 |
不是,對同一方位有無數多種方法 |
不是,有兩種方法,它們互相為互 |
可能導致非法 |
矩陣蠕變 |
任意三個數都能構成合法的尤拉角 |
可能會出現誤差積累,從而產生非法的四元數 |
不同的方位表示方法適用於不同的情況。下面是我們對合理選擇格式的一些建議:
l
包括直接的鍵盤輸入方位、在程式碼中指定方位(如為渲染設定攝像機)、在除錯中測試。這個優點不應該被忽視,不要以”優化”為名義而犧牲易用性,除非你去頂這種優化的確有效果。
l 如果需要在座標系之間轉換響亮,那麼就選擇矩陣形式。當然,這並不意味著你就不能用其他格式來儲存方位,並在需要的時候轉換到矩陣格式。另一種方法是用尤拉角作為方位的”主拷貝”但同時維護一個旋轉矩陣,當尤拉角發生改變時矩陣也要同時進行更新。
l 當需要大量儲存方位資料(如:動畫)時,就使用尤拉角或四元數。尤拉角將少佔用25%的記憶體,但它在轉換到矩陣時要稍微慢一些。如果動畫資料需要巢狀座標系之間的連線,四元數可能是最好的選擇。
l 平滑的插值只能用四元數完成。如果你用其他形式,也可以先轉換到四元數然後再插值,插值完畢後再轉換回原來的形式。