1. 程式人生 > >u3d學習筆記四:Quaternion(四元數)類的備忘

u3d學習筆記四:Quaternion(四元數)類的備忘

概念

四元數是簡單的超複數。 複數是由實數加上虛數單位 i 組成,其中i^2 = -1。 相似地,四元數都是由實數加上三個虛數單位 i、j、k 組成,而且它們有如下的關係: i^2 = j^2 = k^2 = -1, i^0 = j^0 = k^0 = 1 , 每個四元數都是 1、i、j 和 k 的線性組合,即是四元數一般可表示為a + bk+ cj + di,其中a、b、c 、d是實數。

對於i、j、k本身的幾何意義可以理解為一種旋轉,其中i旋轉代表X軸與Y軸相交平面中X軸正向向Y軸正向的旋轉,j旋轉代表Z軸與X軸相交平面中Z軸正向向X軸正向的旋轉,k旋轉代表Y軸與Z軸相交平面中Y軸正向向Z軸正向的旋轉,-i、-j、-k分別代表i、j、k旋轉的反向旋轉。

百度百科

作用

Quaternion在Unity中用來表示所有的旋轉,他們是緊湊的,並且不會出現尤拉角的萬向鎖問題。然而,Quaternion是基於複數的並不容易被直觀地理解,因此你沒有必要訪問或修改單個Quaternion元件(x,y,z,w);通常你只需把現有的旋轉(例如,來自Transform)並使用它們來構造新的旋轉(例如,在兩個旋轉間平滑地插值)。

Quaternion函式的簡單說明

  1. static function Angle (a : Quaternion, b : Quaternion) : float
    返回a和b兩者之間的角度
  2. static function AngleAxis (angle : float, axis : Vector3) : Quaternion
    繞axis軸旋轉angle,建立一個旋轉,程式碼示例如下:
    transform.rotation = Quaternion.AngleAxis(30, Vector3.up);
    其中
    Vector3.forward = Z軸
    Vector3.up = Y軸
    Vector3.right = X軸
  3. static function Dot (a : Quaternion, b : Quaternion) : float
    兩個旋轉之間的點乘,乘積的絕對值越大,則a和b代表的角位移越“相似”。
  4. static function Euler (x : float, y : float, z : float) : Quaternion
    返回一個旋轉角度,繞z軸旋轉z度,繞x軸旋轉x度,繞y軸旋轉y度(像這樣的順序)。
  5. var eulerAngles : Vector3
    返回表示旋轉的尤拉角度,eulerAngles表示的角度,繞z軸旋轉euler.z度,繞x軸旋轉euler.x度,繞y軸旋轉euler.y度(這樣的順序)。
  6. static function FromToRotation (fromDirection : Vector3, toDirection : Vector3) : Quaternion
    從fromDirection到toDirection建立一個旋轉。通常你使用這個旋轉一個變換的其中一個軸,例如,在世界空間,y軸跟隨一個目標方向toDirection
  7. static var identity : Quaternion
    返回恆等式旋轉(只讀)。讓物體完全對齊於世界座標或父軸,也就是相對沒有旋轉、
  8. static function Inverse (rotation : Quaternion) : Quaternion
    返回rotation的反向旋轉
  9. static function Lerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
    通過t值from向to之間插值(就是每次增加t),並且規範化結果。效率上比Slerp更快,但是旋轉較遠的時候的效果沒有Slerp好。
  10. function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : void
    建立一個旋轉,沿著forward(z軸)並且頭部沿著upwards(y軸)的約束注視。也就是建立一個旋轉,使z軸朝向view ,y軸朝向up。當forward的方向是0,記錄一個錯誤
  11. static operator * (lhs : Quaternion, rhs : Quaternion) : Quaternion
    乘法過載預算符,意義是兩個旋轉的組合,就是先旋轉lhs,然後在旋轉rhs。但是要注意的是,旋轉是不可交換的,lhs*rhs不等於rhs*lhs。
  12. static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta : float) : Quaternion
    從from到to旋轉一個角度,基本上和Quaternion.Slerp,但是這個函式的旋轉的角速度永遠不會超過maxDegreesDelta。當masDegreeDelta為負數時,旋轉將相反。
  13. function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
    建立一個從fromDirection到toDirection的旋轉
  14. function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
    建立一個旋轉,沿著forward(z軸)並且頭部沿著up(y軸)的約束注視。也就是建立一個旋轉,使z軸朝向view ,y軸朝向up。
  15. static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
    球形插值,通過t值from向to之間插值。
  16. function ToAngleAxis (out angle : float, out axis : Vector3) : void
    轉換一個旋轉用“角-軸”表示。

總結

都是從API中整理總結的,以為較常用到,所以在這備忘一下!