四元數(Quaternions)與旋轉總結


1 四元數的表示

1.1 一般形式

  • q = s + x i + y j + z k s , x , y , z ∈ R q = s + xi + yj + zk \quad s,x,y,z∈R q=s+xi+yj+zks,x,y,zR
  • i ² = j ² = k ² = i j k = − 1 i² = j² = k² = ijk = -1 i²=j²=k²=ijk=1

1.2 有序對

  • q = [ s , v ⃗ ] 或 [ s , x i + y j + z k ] s , x , y , z ∈ R 我 們 可 以 理 解 為 s 表 示 的 實 部 , 向 量 v ⃗ 表 示 的 就 是 三 維 空 間 q=[s,\vec v] 或 [s,xi + yj + zk] \quad s,x,y,z∈R \\我們可以理解為s表示的實部,向量\vec v表示的就是三維空間 q=[s,v ][s,xi+yj+zk]s,x,y,zRsv

2 四元數的乘法

  • q a = [ s a , a ⃗ ] , q a = [ s a , a ⃗ ] q a q b = [ s a s b − a ⃗ ⋅ b ⃗ , s a b ⃗ + s b a ⃗ + a ⃗ × b ⃗ ] q_a = [s_a,\vec a],\quad q_a = [s_a,\vec a] \\q_aq_b = [s_as_b-\vec a \cdot \vec b,s_a \vec b+s_b \vec a + \vec a \times \vec b] qa=[sa,a ],qa=[sa,a ]qaqb=[sasba b ,sab +sba +a ×b ]

3 單位四元數

  • s 2 + x 2 + y 2 + z 2 = 1 即 四 元 數 模 為 1 s^2 +x^2+y^2+z^2 =1 \\即四元數模為1 s2+x2+y2+z2=11

4 共軛四元數

  • q ∗ = [ s , − v ⃗ ] = s − x i − y j − z k q^* = [s, -\vec v] = s - xi -yj-zk q=[s,v ]=sxiyjzk

5 四元數的逆

  • q − 1 = q ∗ ∣ q ∣ 2 當 q 是 單 位 向 量 時 , q − 1 = q ∗ q^{-1} = \dfrac{q^*}{|q|^2} \quad 當q是單位向量時,q^{-1} = q^* q1=q2qqq1=q

6 四元數與空間旋轉

  • 若 三 維 空 間 里 的 一 個 點 p 的 笛 卡 爾 坐 標 為 ( x , y , z ) , 則 用 純 四 元 數 表 示 為 p = x i + y j + z k 若三維空間里的一個點p的笛卡爾坐標為(x,y,z),則用純四元數表示為p=xi+yj+zk p(x,y,z),p=xi+yj+zk
  • 旋 轉 四 元 數 的 一 般 形 式 : q = [ c o s 1 2 θ , s i n 1 2 θ v ⃗ ] 這 個 四 元 數 表 示 某 個 旋 轉 , 是 繞 單 位 向 量 v ⃗ 進 行 了 θ 角 度 的 逆 時 針 旋 轉 。 旋轉四元數的一般形式:q =[cos \dfrac{1}{2}\theta,sin \dfrac{1}{2}\theta \vec v] \\這個四元數表示某個旋轉,是繞單位向量\vec v進行了\theta角度的逆時針旋轉。 q=[cos21θ,sin21θv ]v θ
  • 點 p 經 過 旋 轉 后 的 位 置 p ′ = q p q − 1 點p經過旋轉后的位置 p' = qpq^{-1} pp=qpq1

7 總結

除了特別難理解之外,相比矩陣或歐拉角,四元數在表示旋轉這個事情上,擁有一些明顯的優點。

  • SLERP和SQUAD,提供了一種使得在朝向之間可以平滑過渡的方法。
  • 使用四元數來串聯"旋轉",要比使用矩陣快得多。
  • 對於單位四元數,逆向旋轉可以通過對向量部分取反來實現。而計算一個矩陣的逆矩陣是被認為比較慢的,如果這個矩陣未被標准正交化的話(標准正交矩陣的逆矩陣是它的轉置矩陣)。
  • 從四元數轉換到矩陣,要比從歐拉角轉換到矩陣快一點。
  • 四元數只需要4個數字(如果旋轉四元數已經單位化了那么只需要3個,實數部分可以在運行時計算)來表示一個旋轉,而矩陣需要至少9個數字。

盡管使用四元數有這么多優點,還是有缺點存在的。

  • 因為浮點數的舍入運算錯誤,四元數可能會變無效。不過,這個錯誤可以通過重新單位化四元數來避免。
  • 使用四元數最具威懾性的地方,還是四元數的理解難度大。

8 旋轉矩陣,歐拉角,四元數比較

參考《3D數學基礎:圖形與游戲開發》

  • 旋轉矩陣,歐拉角,四元數主要用於:向量的旋轉、坐標系之間的轉換、角位移的計算、方位的平滑插值計算。

不同的方位表示方法適用於不同的情況:

  1. 歐拉角最容易使用。當需要為世界中的物體指定方位時,歐拉角能大大簡化人機交互,包括直接鍵盤輸入方位、在代碼中指定方位(如為渲染設定攝像機)、在調試中測試。
  2. 如果需要在坐標系之間轉換向量,就選擇矩陣形式。另一種方法是用歐拉角作為方位的“主拷貝“,但同時維護一個旋轉矩陣,當歐拉角發生改變時,矩陣也要同時進行更新。
  3. 當需要大量保存方位數據(如動畫)時,就使用歐拉角或者四元數,歐拉角少占用25%內存,但是轉換到矩陣慢。如果動畫數據需要嵌套坐標系之間的連接,四元數可能是最好的選擇。
    平滑插值只能用四元數。用其它形式則必須轉到四元數,插值完畢再轉回去。
    旋轉矩陣/歐拉角、四元數比較

9 參考博文

參考鏈接


免責聲明!

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



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