Browse Source

Added Euler unit tests, fixed one bug in Euler, one bug in Rotation.

Ben Houston 12 years ago
parent
commit
44e6f6ab36

+ 2 - 2
src/math/Euler.js

@@ -259,8 +259,8 @@ THREE.Euler.prototype = {
 
 		return function( newOrder ) {
 
-			q.setFromEuler( euler );
-			euler.setFromQuaternion( q, newOrder );
+			q.setFromEuler( this );
+			this.setFromQuaternion( q, newOrder );
 
 		};
 

+ 1 - 1
src/math/Rotation.js

@@ -67,7 +67,7 @@ THREE.Rotation.prototype = {
 
     },
 
-    fromArray: function() {
+    fromArray: function( array ) {
 
         this.euler.fromArray( array );
         this.quaternion.setFromEuler( this.euler );

+ 100 - 0
test/unit/math/Euler.js

@@ -0,0 +1,100 @@
+/**
+ * @author bhouston / http://exocortex.com
+ */
+
+module( "Euler" );
+
+var eulerZero = new THREE.Euler( 0, 0, 0, "XYZ" );
+var eulerAxyz = new THREE.Euler( 1, 0, 0, "XYZ" );
+var eulerAzyx = new THREE.Euler( 0, 1, 0, "ZYX" );
+	
+var matrixEquals4 = function( a, b, tolerance ) {
+	tolerance = tolerance || 0.0001;
+	if( a.elements.length != b.elements.length ) {
+		return false;
+	}
+	for( var i = 0, il = a.elements.length; i < il; i ++ ) {
+		var delta = a.elements[i] - b.elements[i];
+		if( delta > tolerance ) {
+			return false;
+		}
+	}
+	return true;
+};
+
+test( "constructor/equals", function() {
+	var a = new THREE.Euler();
+	ok( a.equals( eulerZero ), "Passed!" );
+	ok( ! a.equals( eulerAxyz ), "Passed!" );
+	ok( ! a.equals( eulerAzyx ), "Passed!" );
+});
+
+test( "clone/copy/equals", function() {
+	var a = eulerAxyz.clone();
+	ok( a.equals( eulerAxyz ), "Passed!" );
+	ok( ! a.equals( eulerZero ), "Passed!" );
+	ok( ! a.equals( eulerAzyx ), "Passed!" );
+
+	a.copy( eulerAzyx );
+	ok( a.equals( eulerAzyx ), "Passed!" );
+	ok( ! a.equals( eulerAxyz ), "Passed!" );
+	ok( ! a.equals( eulerZero ), "Passed!" );
+
+});
+
+test( "set", function() {
+	var a = new THREE.Euler();
+
+	a.set( 0, 1, 0, "ZYX" );
+	ok( a.equals( eulerAzyx ), "Passed!" );
+	ok( ! a.equals( eulerAxyz ), "Passed!" );
+	ok( ! a.equals( eulerZero ), "Passed!" );
+});
+
+test( "clamp", function() {
+	var a = new THREE.Euler( Math.PI*4, -Math.PI*2, 0, 'XYZ' );
+	ok( ! a.equals( eulerZero ), "Passed!" );
+	a.clamp();
+	ok( a.equals( eulerZero ), "Passed!" );
+});
+
+test( "Quaternion.setFromEuler/Euler.fromQuaternion", function() {
+	var testValues = [ eulerZero, eulerAxyz, eulerAzyx ];
+	for( var i = 0; i < testValues.length; i ++ ) {
+		var v = testValues[i];
+		var q = new THREE.Quaternion().setFromEuler( v );
+
+		var v2 = new THREE.Euler().setFromQuaternion( q, v.order );
+		var q2 = new THREE.Quaternion().setFromEuler( v2 );
+		ok( q.equals( q2 ), "Passed!" );	
+	}
+});
+
+
+test( "Matrix4.setFromEuler/Euler.fromRotationMatrix", function() {
+	var testValues = [ eulerZero, eulerAxyz, eulerAzyx ];
+	for( var i = 0; i < testValues.length; i ++ ) {
+		var v = testValues[i];
+		var m = new THREE.Matrix4().makeRotationFromEuler( v );
+
+		var v2 = new THREE.Euler().setFromRotationMatrix( m, v.order );
+		var m2 = new THREE.Matrix4().makeRotationFromEuler( v2 );
+		ok( matrixEquals4( m, m2, 0.0001 ), "Passed!" );	
+	}
+});
+
+test( "reorder", function() {
+	var testValues = [ eulerZero, eulerAxyz, eulerAzyx ];
+	for( var i = 0; i < testValues.length; i ++ ) {
+		var v = testValues[i];
+		var q = new THREE.Quaternion().setFromEuler( v );
+
+		v.reorder( 'YZX' );		
+		var q2 = new THREE.Quaternion().setFromEuler( v );
+		ok( q.equals( q2 ), "Passed!" );	
+
+		v.reorder( 'ZXY' );
+		var q3 = new THREE.Quaternion().setFromEuler( v );
+		ok( q.equals( q3 ), "Passed!" );	
+	}
+});

+ 1 - 0
test/unit/unittests_sources.html

@@ -42,6 +42,7 @@
   <script src="math/Vector2.js"></script>
   <script src="math/Vector3.js"></script>
   <script src="math/Vector4.js"></script>
+  <script src="math/Euler.js"></script>
   <script src="math/Line3.js"></script>
   <script src="math/Quaternion.js"></script>
   <script src="math/Matrix3.js"></script>

+ 1 - 0
test/unit/unittests_three-math.html

@@ -25,6 +25,7 @@
   <script src="math/Vector2.js"></script>
   <script src="math/Vector3.js"></script>
   <script src="math/Vector4.js"></script>
+  <script src="math/Euler.js"></script>
   <script src="math/Line3.js"></script>
   <script src="math/Quaternion.js"></script>
   <script src="math/Matrix3.js"></script>

+ 1 - 0
test/unit/unittests_three.html

@@ -25,6 +25,7 @@
   <script src="math/Vector2.js"></script>
   <script src="math/Vector3.js"></script>
   <script src="math/Vector4.js"></script>
+  <script src="math/Euler.js"></script>
   <script src="math/Line3.js"></script>
   <script src="math/Quaternion.js"></script>
   <script src="math/Matrix3.js"></script>

+ 1 - 0
test/unit/unittests_three.min.html

@@ -25,6 +25,7 @@
   <script src="math/Vector2.js"></script>
   <script src="math/Vector3.js"></script>
   <script src="math/Vector4.js"></script>
+  <script src="math/Euler.js"></script>
   <script src="math/Line3.js"></script>
   <script src="math/Quaternion.js"></script>
   <script src="math/Matrix3.js"></script>