四元数

四元数特点

  1. 1、四元数数据量小,只有四个元素
  2. 2、四元数可以利用向量叉乘来计算,省去了矩阵乘法计算
  3. 3、他会一直保持向量的维度是4

四元数组合

  1. [ w, (x, y, z) ]
  2. [ w, v ]
  3. w是实数, v是三个虚数的组合
  4. 计算
  5. 四元数的四个分量存储着轴角对 v(x, y, z), theta
  6. x = v.x * sin(theta/2)
  7. y = v.y * sin(theta/2)
  8. z = v.z * sin(theta/2)
  9. w = cos(theta/2)

四元数叉乘

  1. 叉乘后还是四元数
  2. 叉乘满足结合律,但不满足交换律.
  3. q1 = [v1, w1]
  4. q2 = [v2, w2]
  5. q1 x q2 = [(v1 * w2 + v2 * w1 + Cross<v1, v2>), (w1 * w2 - Dot<v1, v2>)]
  6. 参照复数四则运算
  7. 使我们的虚数部分变成负数:就是共轭
  8. q w, (-x, -y, -z)]
  9. 求模
  10. |p| = sqrt( a*a + b*b );
  11. |q| = sqrt( pow(cos(a/2), 2) + pow(sin(a/2), 2) )
  12. 求逆
  13. q^-1 = q* / |q|
  14. 如果我们使用单位四元数是单位四元数那么就可以得到 q^-1 = q*. 所以单位四元数的共轨等于他的逆
  15. 将逆和向量叉乘得到我们四元数旋转后的新坐标点
  16. 注意事项
  17. 四元数也是线性的,千万不能同时旋转

四元数和点

  1. 把一个标准3D点(x,y,z)扩展到四元数空间: P = [0, (x,y,z)]即可,一般情况下它不会是单位四元数
  2. Q为旋转四元数Q=[cos(theta/2),nsin(theta/2)],n为单位向量,theta为旋转角度,那么Pn旋转theta度就是:
  3. P` = Q * P * Q^-1

?