在我之前,網上各個博客各大網站都有很多關於四元數的介紹與講解!但我總結了一下接三個字:看不懂!
說實話!
這真的是實話!
舉個例子:

1. 旋轉,應該是三種坐標變換——縮放、旋轉和平移,中最復雜的一種了。大家應該都聽過,有一種旋轉的表示方法叫四元數。按照我們的習慣,我們更加熟悉的是另外兩種旋轉的表示方法——矩陣旋轉和歐拉旋轉。矩陣旋轉使用了一個4*4大小的矩陣來表示繞任意軸旋轉的變換矩陣,而歐拉選擇則是按照一定的坐標軸順序(例如先x、再y、最后z)、每個軸旋轉一定角度來變換坐標或向量,它實際上是一系列坐標軸旋轉的組合。
那么,四元數又是什么呢?簡單來說,四元數本質上是一種高階復數(聽不懂了吧。。。),是一個四維空間,相對於復數的二維空間。我們高中的時候應該都學過復數,一個復數由實部和虛部組成,即x = a + bi,i是虛數單位,如果你還記得的話應該知道i^2 = -1。而四元數其實和我們學到的這種是類似的,不同的是,它的虛部包含了三個虛數單位,i、j、k,即一個四元數可以表示為x = a + bi + cj + dk。那么,它和旋轉為什么會有關系呢?

怎么樣,看得懂嗎?反正小編是被現實胖揍一頓!
那么,今天我們要怎么來介紹這個四元數呢?
我們來最簡單暴力的!
重新定義一下這個怪物四元數!
Quaternion(四元數)用於計算和表示Unity旋轉。它們計算緊湊高效,不受萬向節死鎖的困擾,並且可以很方便快速地進行球面插值。
Unity內部使用四元數來表示所有的旋轉。
注意重點:
1,不受萬向節死鎖的困擾。
2,方便快速地進行球面插值。
3, Unity內部使用四元數來表示所有的旋轉。
好了,現在你得重定義應該是這樣的:
定義:Quaternion(四元數)用於計算和表示Unity旋轉。
就像當初數學老師告訴你∏(pai)用來表示圓周率一樣!
你有探究過∏(pai)是怎么算出來的嗎?
但是你們是不是都知道怎么利用圓周率計算圓的面積呢?
類似的,對於初學者的我們,最重要的是現在要學會和記住四元數的使用方法。
我們來簡單介紹一下:
1,四元數,顧名思義他有四個參數(x,y,z,w).(與三維坐標(x,y,z)相比,多了一個w參數!也是四元數最神秘的一個參數!)
2,xyzw的取值范圍是[-1,1]。
3,初始值: (0,0,0,1)。
4,沿着y軸旋轉:
180°(0,1,0,0)
360°(0,0,0,-1)
540°(0,-1,0,0)
720°(0,0,0,1)
5,沿着x軸旋轉:
180°(-1,0,0,0)
360°(0,0,0,-1)
540°(1,0,0,0)
720°(0,0,0,1)
6,無旋轉的寫法是Quaternion.identify。
我們來介紹幾個常用的方法(可以當作數學公式記憶):
-
Quaternion.LookRotation創建一個旋轉,沿着forward(z軸)並且頭部沿着upwards(y軸)的約束注視。也就是建立一個旋轉,使z軸朝向view y軸朝向up。
-
Quaternion.Angle返回a和b兩向量之間的角度。
-
Quaternion.Euler返回一個旋轉角度,繞z軸旋轉z度,繞x軸旋轉x度,繞y軸旋轉y度(像這樣的順序)。
-
Quaternion.Slerp球形插值,通過t值from向to之間插值。參數取值范圍[0,1]。
-
Quaternion.FromToRotation從fromDirection到toDirection創建一個旋轉。
-
Quaternion.identity同一性旋轉(只讀)。
Quaternion 的基本數學方程為 :
Q = cos (a/2) + i (x * sin(a/2)) + j (y * sin(a/2)) + k(z * sin(a/2)) (a 為旋轉角度)
其中:
Q.w = cos (angle / 2)
Q.x = axis.x * sin (angle / 2)
Q.y = axis.y * sin (angle / 2)
Q.z = axis.z * sin (angle / 2)
上邊這段有背景色的話基本上用不到,學有余力的同學可以深入研究一下!!
我們暫時能用到的四元數運算有兩個:
1,四元數*四元數=四元數
例如:
quaternion * quaternion , q = t * p; 這是將一個點先進行t 操作旋轉,然后進行p操作旋轉.
2,四元數*三維向量=三維向量(特別注意:一定要是四元數在前,三維向量在后的乘法)。
例如 :
Quaternion * Vector3
t : Quaternion
p : Vector3
q:Vector3
q = t * p; 這是將點p 進性t 操作旋轉;
特別注意:四元數*三維向量得到的是三維向量經四元數旋轉操作后的三維向量。結果是一個三維向量!
關於四元數我們就先介紹這么多吧!有想深入了解的同學可以參看以下網站:
http://blog.csdn.net/candycat1992/article/details/41254799
https://www.cnblogs.com/driftingclouds/p/6626183.html
我們要用到坦克炮台旋轉的知識點是:
Quaternion.Slerp球形插值,通過t值from向to之間插值。參數取值范圍[0,1]。
