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

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