Browse Source

REVIEWED: QuaternionFromEuler() #1651

Ray 4 years ago
parent
commit
fe9181c1b4
1 changed files with 14 additions and 14 deletions
  1. 14 14
      src/raymath.h

+ 14 - 14
src/raymath.h

@@ -1461,24 +1461,24 @@ RMDEF void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle
     *outAngle = resAngle;
     *outAngle = resAngle;
 }
 }
 
 
-// Returns he quaternion equivalent to Euler angles
+// Returns the quaternion equivalent to Euler angles
 // NOTE: Rotation order is ZYX
 // NOTE: Rotation order is ZYX
-RMDEF Quaternion QuaternionFromEuler(float yaw, float pitch, float roll)
+RMDEF Quaternion QuaternionFromEuler(float pitch, float yaw, float roll)
 {
 {
     Quaternion q = { 0 };
     Quaternion q = { 0 };
 
 
-    float cy = cosf(yaw*0.5f);
-    float sy = sinf(yaw*0.5f);
-    float cp = cosf(pitch*0.5f);
-    float sp = sinf(pitch*0.5f);
-    float cr = cosf(roll*0.5f);
-    float sr = sinf(roll*0.5f);
-
-    q.x = sr*cp*cy - cr*sp*sy;
-    q.y = cr*sp*cy + sr*cp*sy;
-    q.z = cr*cp*sy - sr*sp*cy;
-    q.w = cr*cp*cy + sr*sp*sy;
-
+    float x0 = cosf(pitch*0.5f);
+    float x1 = sinf(pitch*0.5f);
+    float y0 = cosf(yaw*0.5f);
+    float y1 = sinf(yaw*0.5f);
+    float z0 = cosf(roll*0.5f);
+    float z1 = sinf(roll*0.5f);
+
+    q.x = x1*y0*z0 - x0*y1*z1;
+    q.y = x0*y1*z0 + x1*y0*z1;
+    q.z = x0*y0*z1 - x1*y1*z0;
+    q.w = x0*y0*z0 + x1*y1*z1;
+    
     return q;
     return q;
 }
 }