如何应用一小部分轮换

时间:2015-04-17 08:10:04

标签: java apache math

我正在使用apache数学库。我想应用一个旋转(到矢量),这个旋转与我手头的旋转成比例。像

这样的东西
Rotation rotation2 = number * rotation1;
return rotation2.applyTo(vector);

其中number是旋转角度的乘数,number == 1会导致rotation2等于rotation1,而number == 0会导致旋转(旋转角度== 0)

我该怎么做?

2 个答案:

答案 0 :(得分:2)

就像他的评论中提出的rashmatash一样,你应该

  1. 使用RotationgetQ0getQ3中提取四元数组件。
  2. 使用getAngle获取旋转角度。
  3. 执行SLERP计算。
  4. 将结果转回Rotation
  5. 像这样(未经测试):

    double angle = rotation1.getAngle();
    double sinAngle = Math.sin(angle);
    double factor = Math.sin(number * angle) / sinAngle;
    double factor2 = Math.sin((1 - number) * angle) / sinAngle;
    double q0 = factor * rotation1.getQ0() + factor2;
    double q1 = factor * rotation1.getQ1();
    double q2 = factor * rotation1.getQ2();
    double q3 = factor * rotation1.getQ3();
    Rotation rotation2 = new Rotation(q0, q1, q2, q3, false);
    

答案 1 :(得分:2)

您可以使用getAxis()和getAngle()进行旋转,然后使用相同的轴和修改的角度构建另一个旋转。这比使用四元数更容易。