Winkel zwischen Quaternion mit oder ohne Eigen
- 
					
					
					
					
 Denkfehler? Der Winkel zwischen den Achsen des Standard-Koordinatensystems(xyz) Beträgt Π bzw. 90° Also sollte der Winkel zwischen bspw. Q1(0.1,1,0,0) und Q2(0.1,0,1,0) auch genau 1.570796327 bzw. Π sein. Folgende Funktion und auch die Q1.angularDistance(Q2) von Eigen: double angularDistance(Eigen::Quaterniond a, Eigen::Quaterniond b){ using std::atan2; Eigen::Quaterniond d = a * b.conjugate(); d.normalize(); double angle_result = 2.0f* acos(d.w()); if(angle_result > M_PI) return 2.0f * M_PI - angle_result; return angle_result; }ergeben allerdings bspw.: Q1(0.1,1,0,0) -> Q2(0.1,0,1,0) = 3.12179 
 Q1(0.5,1,0,0) -> Q2(0.5,0,1,0) = 2.73888 
 
- 
					
					
					
					
 quaternionenIon schrieb: Denkfehler? ja quaternionenIon schrieb: Der Winkel zwischen den Achsen des Standard-Koordinatensystems(xyz) Beträgt Π bzw. 90° Also sollte der Winkel zwischen bspw. Q1(0.1,1,0,0) und Q2(0.1,0,1,0) auch genau 1.570796327 bzw. Π sein. Was ist die Signifikanz von 0.1 und 1? 
 Zur einfachen Vorstellung:
 Was ist z.B. mit [101000;1;0] und [101000;0;1]? Nach Normalisierung sind das Punkte, die sehr nahe der gleichen Koordinatenachse liegen, der Winkel zwischen beiden Ortsvektoren wäre folglich nahe Null.
 
- 
					
					
					
					
 Vielen Dank für deine Antwort! der Winkel zwischen beiden Ortsvektoren wäre folglich nahe Null. Ok, das kann ich nachvollziehen. Aber im konkreten Beispiel habe ich mal einfach X und Y-Vector angesetzt und den Winkel zwischen den entsprechenden Quaternionen berechnen lassen. Eigen::AngleAxisd startAxis(0,Eigen::Vector3d::UnitX()); Eigen::Quaterniond startQuaternion(startAxis); startQuaternion.normalize(); Eigen::AngleAxisd targetAxis(0,Eigen::Vector3d::UnitY()); Eigen::Quaterniond target_pose(targetAxis); target_pose.normalize();Warum sind die Quaternionen identisch?  startAxis.angle(): 0.000000, X: 1.000000, Y: 0.000000, Z: 0.000000 
 targetAxis.angle(): 0.000000, X: 0.000000, Y: 1.000000, Z: 0.000000startQuaternion.w(): 1 startQuaternion.x(): 0 startQuaternion.y(): 0 startQuaternion.z(): 0 
 target_pose.w(): 1 target_pose.x(): 0 target_pose.y(): 0 target_pose.z(): 0angularDistance: 0 
 
- 
					
					
					
					
 Habs verstanden! Die Rotation bezieht sich immer auf einen "Start-Vector" bzw. ein fixes Koordinatensystem. Jetzt ergibt alles einen Sinn! Vielen Dank!