comment appliquer une fraction de rotation

J’utilise une bibliothèque mathématique Apache. Je veux appliquer une rotation (à un vecteur) proportionnelle à la rotation que j’ai sous la main. Quelque chose comme

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

où nombre correspond au multiplicateur pour l’angle de rotation et nombre == 1 entraînerait une rotation2 égale à rotation1 et un nombre == 0 entraînerait une absence de rotation (angle de rotation == 0)

Comment puis-je faire ceci?

Comme rashmatash suggéré dans son commentaire, vous devriez

  1. Extraire les composants quaternion de la Rotation utilisant getQ0 à getQ3 .
  2. Obtenez l’angle de rotation à l’aide de getAngle .
  3. Effectuez un calcul SLERP .
  4. Retourner le résultat dans une Rotation .

Quelque chose comme ça (non testé):

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

Vous pouvez obtenir getAxis () et getAngle () pour la rotation, puis créer une autre rotation avec le même axe et l’angle modifié. C’est plus facile que de travailler avec des quaternions.