2015-04-17 30 views
1

我正在使用apache数学库。我想应用一个旋转(对于一个向量),它与我手边的旋转成比例。像如何应用一部分旋转

Rotation rotation2 = number * rotation1; 
return rotation2.applyTo(vector); 

其中number为旋转角度的乘数,和数量== 1将导致rotation2等于rotation1,和数量== 0将导致到无旋转(旋转角== 0)

我该怎么做?

+1

你应该从'Rotation'中得到一个四元数,然后执行一个球面线性插值(SLERP)。然后把四元数放回'Rotation'。我对apache数学库不熟悉,但几乎所有的数学引擎都使用四元数进行旋转。 – rashmatash

+0

交叉参考:如果您不仅对旋转感兴趣,而且对一般的仿射变换感兴趣,那么[本文](http://math.stackexchange.com/a/614807/35416)可能会对您感兴趣。 – MvG

回答

2

像rashmatash建议在他的评论,你应该

  1. 通过getQ3提取使用getQ0Rotation的四元组成。
  2. 使用getAngle获取旋转角度。
  3. 执行SLERP计算。
  4. 将结果转回Rotation

像这样(未测试):getAngle()

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); 
2

你可以getAxis()和用于旋转,然后生成具有相同的轴和修饰的角度另一个转动。这比使用四元数更容易。