Ich versuche, ein Objekt um 45 Grad mit Quaternionen über Y-Achse zu drehen. Nachdem ich das Quaternion spezifiziert habe, versuche ich die Rotationsmatrix zu bekommen. Aber die Werte, die ich sehen, sind falschQuaternion zu Rotationsmatrix, falsche Werte mit Eigenbibliothek
Eigen::Quaterniond q;
q.x() = 0;
q.y() = 1;
q.z() = 0;
q.w() = PI/8; // Half of the rotation angle must be specified, even IDK why
Eigen::Matrix3d R = q.normalized().toRotationMatrix();
std::cout << "R=" << std::endl << R << std::endl;
OUTPUT:
R=
-0.732 -0 -0.680
0 1 -0
0.680 0 -0.732
Da die OpenGL Rotation Matrix entlang der Y-Achse sollte sein:
Daher meine erwartete Ausgabe sollte sein:
R=
0.707 0 0.707
0 1 0
-0.707 0 0.707
Nicht nur sind die Werte um ein kleines Prozent deaktiviert, die falschen Zeichen auf den Werten verursachen einige unerwartete Rotationen. Wegen der negativen Vorzeichen macht mein Würfel eine 180 Grad Drehung plus den angegebenen Winkel. Ich habe mir den ganzen Tag über den Kopf gebrochen. Kann mir jemand sagen, was ich falsch mache?
45 Grad 'pi/4' – Rostislav
Ich weiß nicht, hocken über Quaternionen, aber ich weiß, dass die/8 entspricht 22,5 °. 45 ° ist/4. – Logicrat
@Logicrat Auch ich weiß nicht warum, aber Sie müssen die Hälfte des Winkels angeben. Also wenn ich um 'PI/4 'rotieren muss, muss ich es als' PI/8' spezifizieren. –