歐拉角和四元數


提出

在 Unity 中 我使用了 transfrom.localEulerAngles.y 去獲取旋轉角度 y 的值,而並沒有用 localRotation 這就涉及到了歐拉角(EulerAngles)和四元數(Quaternion)的概念。

歐拉角(EulerAngles)

百度百科說道,”歐拉角是用來唯一地確定定點轉動明體位置的三個一組獨立角參量,由章動角θ、進動角ψ和自轉角φ組成,為L.歐拉首先提出,故得名。“

在 Unity 中 EulerAngles 使用三個值(x,y,z)組成的旋轉序列來表示角位移,這三個值分別繞三個相互垂直的軸(本地坐標軸)的旋轉角度。

XYZ 約定一:heading-pitch-bank 約定(來自網絡)

  1. 先將物體坐標系與慣性坐標系重合
  2. heading 繞此時物體坐標系的 y 軸旋轉
  3. pitch 繞 heading 旋轉后的物體坐標系的 x 軸旋轉
  4. bank 繞 heading-pitch 旋轉后的物體坐標系的 z 軸旋轉

XYZ約定二:yaw-pitch-roll 約定 (來自《Unity 5 實踐》)

  1. 先將物體坐標系與慣性坐標系重合
  2. yaw(偏航) 繞此時物體坐標系的 y 軸旋轉
  3. pitch(偏角) 繞 heading 旋轉后的物體坐標系的 x 軸旋轉
  4. roll(側滾) 繞 heading-pitch 旋轉后的物體坐標系的 z 軸旋轉

四元數(quaternion)

四元數是一個描述旋轉的數學概念,強烈推薦去看一遍B站的一個視頻【Numberphile數字狂】神奇四元數

看完視頻后,可以簡單說,我們在一維空間(X軸)移動需要一個數,這個就是實數(1 or -1)。在二位空間(XY坐標軸)移動和旋轉我們需要添加一個數,這個數就是復數i(i²=-1),進入三維空間(xyz坐標軸)移動和旋轉我們就需要再添加兩個數,構成的就是四元數ijk(i²=j²=k²=ijk=-1)。

在 Unity 方面 Quaternion 是為了在旋轉值之間插值,使得旋轉看起來更平滑和自然。三維動畫和游戲中常用四元數,如果是歐拉旋轉(用xyz軸的轉動角表示),轉動的路徑常常不是弧形,有時還會造成萬向節鎖,也就是無法旋轉,四元數很好地解決了這個問題。

總結

localRotation 是一個四元數,而不是歐拉角,使用 EulerAngles 是為了讓旋轉更加容易理解,Unity 提供了歐拉角和四元數的自動轉換,方便開發人員進行操作。


免責聲明!

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



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