3D數學基礎————Quaternion(四元數)

1.四元數的記法

定義:繞向量v旋轉角度θ

q = \begin{bmatrix} \cos \theta/2 w& \cos \theta V \end{bmatrix}

2.負四元數

-q = \begin{bmatrix} -w &-v \end{bmatrix}

負四元數相當於旋轉角度加上360°,實際角位移沒有發生改變,但q的四個分量都變負了,每個四元數都有兩個表示方法,兩者互相爲負

3.單位四元數

p = \begin{bmatrix} 1 & 0 \end{bmatrix}

4.四元數的模

|q| = |\begin{bmatrix} w &v \end{bmatrix}| = \sqrt{w^2+x^2+y^2+z^2}

當v爲單位向量時

|q| = 1;q表示爲單位四元數

一般使用單位四元數表示方位

5.四元數的共軛和逆

q^T = \begin{bmatrix} w & -x & -y & -z \end{bmatrix}

q^-1 = q^t/|q|

因爲只使用單位四元數,四元數的共軛和逆相等

6.四元數的乘法(叉乘)

6.1 乘法表達式

q = \begin{bmatrix} w1w2-V1V2 & w1 V2+w2V1-V2\times V1 \end{bmatrix}

滿足結合律不滿足交換律

6.2.四元數叉乘的模 

|q1q2| = |q1||q2|;

四元數乘積的模等於模的乘積

6.3四元數乘積的逆

(p_{1}p_{2}p_{3})^{-1} = p_{3}^{-1}p_{2}^{-1}p_{1}^{-1}

四元數的叉乘可以連接旋轉序列

7.四元數的旋轉

將一個標準的3D點擴展到四元數空間

v = (x,y,z);

p = [0,v] = [0,x,y,z];

設q爲旋轉四元數

n爲旋轉軸 θ爲

q = \begin{bmatrix} \cos (\theta /2) & \sin(\theta/2)n \end{bmatrix}

單個旋轉

p^{'}= qpq^{-1}

 多個旋轉序列

p^{'} = b(apa^{-1})b^{-1} = (ba)p(ba)^{-1}

8.四元數的差

'差'被定義爲一個方位到另一個方位的角位移

設 給定方位a和b 角位移d爲

ad=b

a^{-1}(ad)=a^{-1}b

d = a^{-1}b

9.四元數的點乘

q_1*q_2 = w_1w_2+v_1v_2=w_1w_2+x_1x_2+y_1y_2+z_1z_2

對於單位向量四元數a和b,

a*b的絕對值越大兩個四元數的角位移越相似

a=[\cos \alpha ,\sin\alpha ]*[\cos\beta ,\sin\beta ]=cos(\alpha -\beta )

10.四元數的對數,指數

設α爲旋轉角度,n爲單位向量

10.1四元數的對數

log(q) = [0,\alpha n]

四元數的對數一般不是單位四元數

10.2四元數的指數

exp([0,\alpha n]) = [\cos\alpha ,\sin\alpha n]

四元數的指數一般返回單位四元數

exp(log^q) = q

 

11.四元數的冪

a^t  t屬於[0,1]

當t=0時 a^0 = 1   

當t = 1時   a^1 = a

當t從0變成1時,四元數q從[1,0]到q

四元數的冪可是從角位移中抽取"一部分"

注意

四元數的冪會有超出幾何範圍的的行爲,四元數表達角位移時使用最短圓弧,不能繞圈

例如q表示繞軸旋轉30°,而q^2表示繞軸旋轉60°,

預期行爲中q^4表示繞軸旋轉240°而真實情況確實繞軸-80°

因此(q^4)^{1/2}!=q^2,所以(q^a)^b對四元數不適用。

q^t=exp(tlog^q)

12.四元數的插值(球面線性插值)

lerp(q1,q2,t)表達的是沿着q1和q2構成的圓弧行進的四元數

即任意一段從q1旋轉到q2的路徑

在兩個標量之間的插值

d = a2-a1;

lerp(a1,a2,t) = a1+t*d;

理論上的四元數的線性插值

lerp(q1,q2,t) =q1(q1^{-1}q2)^t

球面線性插值

slerp(q_0,q_1,t) = (\sin (1-t)w/\sin w)q_0+(\sin tw/\sin w)q_1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章