方位和角位移的基本概念
什麼是方位、角位移?
直觀的說,我們知道,物體的「方位」主要描述物體的朝向,然而,「方向」和「方位」並不完全一樣。向量有「方向」但沒有「方位」,區別在於,當乙個向量指向特定方向時,可以讓向量自轉,但向量卻不會發生任何變化,因為向量的屬性只有大小,而沒有厚度和寬度。
然而,當乙個物體朝向特定的方向時,讓它和上面向量一樣自轉,我們就會發現物體的方位改變了。
從技術角度來講,這就說明在3d中,只要用兩個引數,就能用引數表示乙個方向。但是,要確定乙個方位,至少需要三個引數。
描述物體的方位時,不能使用絕對量。方位是通過於相對已知方位的旋轉來描述的。旋轉的量稱作角位移。換句話說,在數學上描述方位就等價於描述角位移。
ps:我們用矩陣和四元數來表示角位移,用尤拉角來表示方位。
方位表示
矩陣形式
3d中,描述座標系中方位的一種方法就是列出這個座標系的基向量,這些基向量是用其他的座標系來描述的。用這些基向量構成乙個3x3矩陣,然後就能用矩陣形式來描述方位。也就是說,能用乙個旋轉矩陣來描述兩個座標系之間的相對方位,然後用這個旋轉矩陣把乙個座標系中的向量轉換到另乙個座標系中。
矩陣形式的優點:
1.可以立即進行向量的旋轉。
2.矩陣的形式被圖形api所用。
3.多個角位移連線。
矩陣形式的缺點:
1.矩陣占用更多的記憶體。
2.難於使用,不太直觀。
3.矩陣可能是病態的(資料冗餘)
四元數表示
四元數的「差」被定義為乙個方位到另乙個方位的角位移。ps:上篇筆記中詳細的記錄的四元數的相關性質,這裡就不在過多說明了。
四元數表示的優點:
1.平滑插值。
2.快速連線和角位移求逆。
3.能和矩陣形式快速轉換。
4.僅有四個數,節省空間。
四元數表示的缺點:
1.比尤拉角稍微大一些。
2.四元數可能不合法。
3.難於使用。
尤拉角歷史淵源:尤拉角著名的數學家leonhard euler的名字命名,他證明了角位移序列等價於單個角位移。
尤拉角的基本思想是將角位移分解為繞三個相互垂直軸的三個旋轉組成的序列。任意的三個軸和任意的序列都可以,但最有意義的是使用笛卡爾座標系並按一定順序所組成的旋轉序列。
尤拉角表示角位移的優點:
1.尤拉角對我們來說很容易使用。
2.最簡潔的表達方式。
3.任意三個數都是合法的。
尤拉角表示角位移的缺點:
1.給定的表達方式不唯一(旋轉序列不唯一導致)。
2.兩個角度間求插值非常困難。
各方法比較
任務/性質
矩陣尤拉角
四元數在座標系間旋轉點
能不能(必須轉換到矩陣)
不能(必須轉換到矩陣)
連線或增量旋轉
能,但比四元數慢,會有矩陣蠕變
不能能,比矩陣塊
插值基本上不能
能,但可能遭遇萬向鎖
slerp提供了平滑插值
易用程度難易
難在記憶體或檔案中的儲存
9個數3個數
4個數對給定方位的表示式方式是否唯一
唯一不唯一,對同意方位有無數種表示方法
不唯一,有兩種表示方法,相互為負
可能導致非法
矩陣蠕變
任意三個數構成合法地尤拉角
可能出現差積累,從而產生非法的四元數
不同方位表示方法的建議:
1.尤拉角最容易使用。
2.如果需要在座標系之間轉換向量,那麼就選擇矩陣形式。
3.當需要大量保持方位資料時,就使用尤拉角或四元數。
4.平滑插值只能用四元數來完成。
-end-
參考文獻: (1)《3d math primer for graphics and game development》
(2) 維基百科
3D數學基礎 3D中的方位與角位移 3
先來看下下面的總結表 不同的方位表示方法適用於不同的情況,下面是一些選擇的建議 設矩陣儲存在下面這些變數中 float m11,m12,m13 float m21,m22,m23 float m31,m32,m33 以弧度形式計算尤拉角並儲存在以下變數中 360 2 弧度 float h,p,b 從...
3D數學讀書筆記 矩陣高階
終於要學習矩陣的平移了,通過平移可以處理很多問題,包括非座標軸基準的變換問題,不同座標系轉換問題。嘿嘿!行列式 其實行列式就是一種計算法則 在任意矩陣中都存在乙個標量,稱作該方陣的行列式。方陣m的行列式記作 m 或 det m 非方陣矩陣的行列式是未定義的。2 2階矩陣行列式的定義 3 3階矩陣行列...
3D數學讀書筆記 四元數
什麼是四元數 複數是由實數加上虛數單位i 組成,當中 i 1 相似地,四元數都是由實數加上三個元素 i j k 組成,並且它們有例如以下的關係 i j k ijk 1 每乙個四元數都是 1 i j 和 k 的線性組合,即是四元數一般可表示為a bi cj dk。關於四元數的歷史 四元數是由哈密頓在1...