天天看點

四元數基礎

四元數基礎知識。

  

四元數基礎

  以下内容摘自《3D數學基礎:圖形與遊戲開發》(清華大學出版社)

四元數  

四元數基礎

1.四元數和軸-角對

  繞軸n旋轉θ角:n是一個向量,根據左手或右手法則定義旋轉的正方向, θ角表示旋轉的量。

  那麼表示這個旋轉的四元數為:

四元數基礎

2.機關四元數

  幾何上存在兩個機關四元數,它們代表沒有角位移:

四元數基礎

  任意四元數乘以一個幾何機關四元數得到的角位移相同(雖然乘以兩種形式得到q和-q的數形式不同,但是幾何意義相同,可以認為結果相同)。

  數學上實際隻有一個機關四元數,即:

四元數基礎

  因為數學上q和-q不相等。

3.四元數的模

四元數基礎

  代入軸-角對的公式求模。

  n為機關向量,最後可以得到四元數的模為1.稱為機關四元數。

4.四元數的共轭和逆

  四元數的共轭就是讓四元數的向量部分取負,記作:

四元數基礎

  四元數和它的共轭代表相反的角位移,因為相當于旋轉軸反向。

  四元數的逆定義為四元數的共轭除以它的模:

四元數基礎

  一般使用機關四元數,此時它的逆和共轭其實是相等的。

5.四元數乘法(叉乘)

四元數基礎

  不用為四元數叉乘使用乘号,“行”“列”四元數也沒有什麼差別。

  四元數叉乘滿足結合律,但是不滿足交換律。

  四元數乘積的模等于模的乘積,這樣保證了機關四元數相乘仍然是機關四元數。

  四元數乘積的逆等于各個四元數的逆以相反的順序相乘。

6.标準3D點的四元數旋轉

  擴充一個标準的3D點(x,y,z)到四元數空間,通過定義四元數:

四元數基礎

  即可。

  設我們讨論的旋轉四元數為:

四元數基礎

  則執行下面的乘法可以使3D點p繞n旋轉:

四元數基礎

  多次旋轉的情況:

四元數基礎

  注意這個旋轉是以從右向左的順序發生的。

  可以改變标準的定義,以相反的運算順序來定義四元數乘法,進而将形式變為與旋轉發生的順序一緻,此處公式略去。

7.四元數“差”

  利用四元數的乘法和逆,可以計算兩個四元數的“差”,四元數“差”表示一個方位到另一個方位的角位移。

  注意不能除以四元數,隻能乘以它們的逆來達到目的。

8.四元數的點乘

  點乘結果是标量,兩個機關四元數點乘的結果區間為[-1,1]。

  點乘結果的絕對值越大,相乘的兩個四元數代表的角位移越相似。

9.四元數的對數、指數和标量乘運算

  略。

10.四元數求幂
四元數基礎

  若四元數

四元數基礎

代表一個角位移,

四元數基礎

中取t等于1/3,就得到代表1/3這個角位移的四元數。

  注意的是四元數表達角位移時使用最短圓弧,不能繞圈。

  即如果q代表繞x軸順時針旋轉60°,那麼t取4時不是預期的繞x軸順時針旋轉240°,而是逆時針80°。

  是以凡是涉及到指數運算的代數公式,如

四元數基礎

,對四元數不再适用。

  S=4,t=1/2,本來應該是等同于

四元數基礎

,然而由于t=4時選了最短弧,是以産生的不是預期的結果。

11.四元數插值——“Slerp”

  球面線性插值(Spherical Linear Interpolation).

  Slerp運算非常有用,因為它可以在兩個四元數間平滑插值,避免了歐拉角插值的所有問題(角度限制以找到最短弧,萬向鎖(導緻抖動、路徑錯誤),根本問題是插值過程中角速度不是恒定的。)

  兩個标量間的插值一般是這樣:

四元數基礎

  可以使用同樣的步驟在四元數間插值:

  (1).計算兩個值的差。利用逆矩陣推到的。

  (2).計算差的一部分。(四元數求幂)。

  (3).在開始值上加上差的一部分。(方法使用四元數乘法來組合角位移)

  這是理論上的Slerp計算過程。實踐中将使用一種更加有效的方法。

  所有機關四元數都存在于一個4D球面上。

  幾何推導略。結果:

四元數基礎

  可以用點乘來計算兩個四元數之間的“角度”。

  有兩點需要考慮:

  (1)四元數q和-q代表相同的方位,但它們作為slerp的參數時可能導緻不一樣的結果。解決方法是選擇兩個數的符号使得它們點乘的結果是非負。

  (2)如果兩個四元數非常接近,那麼sin會非常小,這時候除法可能會出現問題,為了避免這樣的問題,當sin非常小時使用簡單的線性插值。

12.四元數樣條——“squad”

   

 Spherical and Quadrangle

  木有看懂。

13.四元數的優缺點

  優點:

  平滑插值。

  快速連接配接和角位移求逆。

  能和矩陣形式快速轉換。

  僅用四個數。

  缺點:

  比歐拉角稍微大一些。

  四元數可能不合法。壞的輸入資料或浮點數舍入誤差積累引起。(通過四元數标準化解決這個問題,確定四元數為機關大小。)

  難于使用。

14.四元數、歐拉角、矩陣之間的轉換

參考資料:

  《3D數學基礎:圖形與遊戲開發》(清華大學出版社)

作者: 聖騎士Wind

出處: 部落格園: 聖騎士Wind

Github: https://github.com/mengdd

微信公衆号: 聖騎士Wind

四元數基礎

繼續閱讀