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
Rotation
utilisant getQ0
à getQ3
. getAngle
. 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.