结合旋转轴矢量

Dwa*_*yne 8 math 3d vector matrix quaternions

我正在尝试在我的爱好游戏引擎中使用轴角向量进行旋转.这是沿旋转轴的3分量矢量,旋转长度以弧度表示.我喜欢他们因为:

  • 与quats或旋转矩阵不同,我实际上可以看到数字并在脑海中可视化旋转
  • 它们比四元数或矩阵的内存少一点.
  • 我可以表示-Pi到Pi范围之外的值(如果我存储角速度,这很重要)

但是,我有一个紧密的循环,根据角速度更新我的所有物体(数万)的旋转.目前,我知道组合两个旋转轴向量的唯一方法是将它们转换为四元数,将它们相乘,然后将结果转换回轴/角度.通过剖析,我发现这是一个瓶颈.有谁知道更直接的方法?

and*_*and 2

如果您的旋转向量是单位长度,您的表示相当于四元数旋转。如果您不想使用某些固定的四元数数据结构,您应该简单地确保旋转向量具有单位长度,然后计算出等效的四元数乘法/倒数计算来确定聚合旋转。您也许能够减少乘法或加法的次数。

如果你的角度是唯一正在改变的东西(即旋转轴是恒定的),那么你可以简单地使用角度的线性缩放,并且,如果你愿意,将其修改为范围 [0, 2π)。因此,如果每秒旋转速率为 α raidans,从时间 t 0处的初始角度 θ 0开始,则时间 t 处的最终旋转角度由下式给出:

θ(t) = θ 0 +α(tt 0 ) mod 2π

然后,您只需将该旋转应用于向量集合即可。

如果这些都不能提高您的性能,您应该考虑使用固定的四元数库,因为这些东西已经针对您正在讨论的应用程序类型进行了优化。