四元数
四元数特点
1、四元数数据量小,只有四个元素
2、四元数可以利用向量叉乘来计算,省去了矩阵乘法计算
3、他会一直保持向量的维度是4维
四元数组合
[ w, (x, y, z) ]
[ w, v ]
w是实数, v是三个虚数的组合
计算
四元数的四个分量存储着轴角对 v(x, y, z), theta
x = v.x * sin(theta/2)
y = v.y * sin(theta/2)
z = v.z * sin(theta/2)
w = cos(theta/2)
四元数叉乘
叉乘后还是四元数
叉乘满足结合律,但不满足交换律.
q1 = [v1, w1]
q2 = [v2, w2]
q1 x q2 = [(v1 * w2 + v2 * w1 + Cross<v1, v2>), (w1 * w2 - Dot<v1, v2>)]
参照复数四则运算
使我们的虚数部分变成负数:就是共轭
q* = [w, (-x, -y, -z)]
求模
|p| = sqrt( a*a + b*b );
|q| = sqrt( pow(cos(a/2), 2) + pow(sin(a/2), 2) )
求逆
q^-1 = q* / |q|
如果我们使用单位四元数是单位四元数那么就可以得到 q^-1 = q*. 所以单位四元数的共轨等于他的逆
将逆和向量叉乘得到我们四元数旋转后的新坐标点
注意事项
四元数也是线性的,千万不能同时旋转
四元数和点
把一个标准3D点(x,y,z)扩展到四元数空间: P = [0, (x,y,z)]即可,一般情况下它不会是单位四元数
设Q为旋转四元数Q=[cos(theta/2),nsin(theta/2)],n为单位向量,theta为旋转角度,那么P绕n旋转theta度就是:
P` = Q * P * Q^-1
?