Przeglądaj źródła

Merge pull request #236 from CIB/cleanup

Added Quaternion::ToEulerAngles
Ivan Safrin 12 lat temu
rodzic
commit
a6350079bf
1 zmienionych plików z 9 dodań i 0 usunięć
  1. 9 0
      Core/Contents/Include/PolyQuaternion.h

+ 9 - 0
Core/Contents/Include/PolyQuaternion.h

@@ -237,6 +237,15 @@ namespace Polycode {
         y = fSin*rkAxis.y;
         z = fSin*rkAxis.z;
     }
+
+	void ToEulerAngles (Vector3& eulerAngles) {
+		// See http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
+		// q0 = w, q1 = x, q2 = y, q3 = z
+		eulerAngles.x = atan2( 2 * ( w * x + y * z), 1 - 2 * (x * x + y * y) );
+		eulerAngles.y = asin(2 * ( w * y - z * x));
+		eulerAngles.z = atan2( 2 * ( w * z + x * y), 1 - 2 * (y * y + z * z) );
+	}
+
     //-----------------------------------------------------------------------
     void ToAngleAxis (Number& rfAngle, Vector3& rkAxis) 
     {