Euler.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * @author bhouston / http://exocortex.com
  3. */
  4. module( "Euler" );
  5. var eulerZero = new THREE.Euler( 0, 0, 0, "XYZ" );
  6. var eulerAxyz = new THREE.Euler( 1, 0, 0, "XYZ" );
  7. var eulerAzyx = new THREE.Euler( 0, 1, 0, "ZYX" );
  8. var matrixEquals4 = function( a, b, tolerance ) {
  9. tolerance = tolerance || 0.0001;
  10. if( a.elements.length != b.elements.length ) {
  11. return false;
  12. }
  13. for( var i = 0, il = a.elements.length; i < il; i ++ ) {
  14. var delta = a.elements[i] - b.elements[i];
  15. if( delta > tolerance ) {
  16. return false;
  17. }
  18. }
  19. return true;
  20. };
  21. test( "constructor/equals", function() {
  22. var a = new THREE.Euler();
  23. ok( a.equals( eulerZero ), "Passed!" );
  24. ok( ! a.equals( eulerAxyz ), "Passed!" );
  25. ok( ! a.equals( eulerAzyx ), "Passed!" );
  26. });
  27. test( "clone/copy/equals", function() {
  28. var a = eulerAxyz.clone();
  29. ok( a.equals( eulerAxyz ), "Passed!" );
  30. ok( ! a.equals( eulerZero ), "Passed!" );
  31. ok( ! a.equals( eulerAzyx ), "Passed!" );
  32. a.copy( eulerAzyx );
  33. ok( a.equals( eulerAzyx ), "Passed!" );
  34. ok( ! a.equals( eulerAxyz ), "Passed!" );
  35. ok( ! a.equals( eulerZero ), "Passed!" );
  36. });
  37. test( "set", function() {
  38. var a = new THREE.Euler();
  39. a.set( 0, 1, 0, "ZYX" );
  40. ok( a.equals( eulerAzyx ), "Passed!" );
  41. ok( ! a.equals( eulerAxyz ), "Passed!" );
  42. ok( ! a.equals( eulerZero ), "Passed!" );
  43. });
  44. test( "Quaternion.setFromEuler/Euler.fromQuaternion", function() {
  45. var testValues = [ eulerZero, eulerAxyz, eulerAzyx ];
  46. for( var i = 0; i < testValues.length; i ++ ) {
  47. var v = testValues[i];
  48. var q = new THREE.Quaternion().setFromEuler( v );
  49. var v2 = new THREE.Euler().setFromQuaternion( q, v.order );
  50. var q2 = new THREE.Quaternion().setFromEuler( v2 );
  51. ok( q.equals( q2 ), "Passed!" );
  52. }
  53. });
  54. test( "Matrix4.setFromEuler/Euler.fromRotationMatrix", function() {
  55. var testValues = [ eulerZero, eulerAxyz, eulerAzyx ];
  56. for( var i = 0; i < testValues.length; i ++ ) {
  57. var v = testValues[i];
  58. var m = new THREE.Matrix4().makeRotationFromEuler( v );
  59. var v2 = new THREE.Euler().setFromRotationMatrix( m, v.order );
  60. var m2 = new THREE.Matrix4().makeRotationFromEuler( v2 );
  61. ok( matrixEquals4( m, m2, 0.0001 ), "Passed!" );
  62. }
  63. });
  64. test( "reorder", function() {
  65. var testValues = [ eulerZero, eulerAxyz, eulerAzyx ];
  66. for( var i = 0; i < testValues.length; i ++ ) {
  67. var v = testValues[i];
  68. var q = new THREE.Quaternion().setFromEuler( v );
  69. v.reorder( 'YZX' );
  70. var q2 = new THREE.Quaternion().setFromEuler( v );
  71. ok( q.equals( q2 ), "Passed!" );
  72. v.reorder( 'ZXY' );
  73. var q3 = new THREE.Quaternion().setFromEuler( v );
  74. ok( q.equals( q3 ), "Passed!" );
  75. }
  76. });