WestLangley 7 years ago
parent
commit
ada626d07b
1 changed files with 34 additions and 29 deletions
  1. 34 29
      examples/js/utils/MathUtils.js

+ 34 - 29
examples/js/utils/MathUtils.js

@@ -1,58 +1,63 @@
 /**
- * @author WestLangley
- * @author thezwap 
+ * @author WestLangley / http://github.com/WestLangley
+ * @author thezwap / http://github.com/thezwap
  */
 
 THREE.MathUtils = {
-    setQuaternionFromProperEuler: function (q, a, b, c, order) {
 
-        var cos = Math.cos;
-        var sin = Math.sin;
+    setQuaternionFromProperEuler: function ( q, a, b, c, order ) {
 
-        var c2 = cos(b / 2);
+        // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles
 
-        var s2 = sin(b / 2);
+        // rotations are applied to the axes in the order specified by 'order'
+        // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'
+        // angles are in radians
 
-        var c13 = cos((a + c) / 2);
-        var s13 = sin((a + c) / 2);
+        var cos = Math.cos;
+        var sin = Math.sin;
 
-        var c1_3 = cos((a - c) / 2);
-        var s1_3 = sin((a - c) / 2);
+        var c2 = cos( b / 2 );
+        var s2 = sin( b / 2 );
 
-        var c3_1 = cos((c - a) / 2);
-        var s3_1 = sin((c - a) / 2);
+        var c13 = cos( ( a + c ) / 2 );
+        var s13 = sin( ( a + c ) / 2 );
 
-        if (order === 'XYX') {
+        var c1_3 = cos( ( a - c ) / 2 );
+        var s1_3 = sin( ( a - c ) / 2 );
 
-            q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);
+        var c3_1 = cos( ( c - a ) / 2 );
+        var s3_1 = sin( ( c - a ) / 2 );
 
-        } else if (order === 'YZY') {
+        if ( order === 'XYX' ) {
 
-            q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);
+            q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );
 
-        } else if (order === 'ZXZ') {
+        } else if ( order === 'YZY' ) {
 
-            q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);
+            q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );
 
-        } else if (order === 'XZX') {
+        } else if ( order === 'ZXZ' ) {
 
-            q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);
+            q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );
 
-        } else if (order === 'YXY') {
+        } else if ( order === 'XZX' ) {
 
-            q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);
+            q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );
 
-        } else if (order === 'ZYZ') {
+        } else if ( order === 'YXY' ) {
 
-            q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);
+            q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );
 
-        }
+        } else if ( order === 'ZYZ' ) {
+
+            q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );
 
-        else {
+        } else {
 
-            console.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.');
+            console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.' );
 
         }
 
     }
-}
+
+};