|
@@ -146,105 +146,119 @@ Object.assign( Euler.prototype, {
|
|
|
|
|
|
order = order || this._order;
|
|
order = order || this._order;
|
|
|
|
|
|
- if ( order === 'XYZ' ) {
|
|
|
|
|
|
+ switch ( order ) {
|
|
|
|
|
|
- this._y = Math.asin( clamp( m13, - 1, 1 ) );
|
|
|
|
|
|
+ case 'XYZ':
|
|
|
|
|
|
- if ( Math.abs( m13 ) < 0.9999999 ) {
|
|
|
|
|
|
+ this._y = Math.asin( clamp( m13, - 1, 1 ) );
|
|
|
|
|
|
- this._x = Math.atan2( - m23, m33 );
|
|
|
|
- this._z = Math.atan2( - m12, m11 );
|
|
|
|
|
|
+ if ( Math.abs( m13 ) < 0.9999999 ) {
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ this._x = Math.atan2( - m23, m33 );
|
|
|
|
+ this._z = Math.atan2( - m12, m11 );
|
|
|
|
|
|
- this._x = Math.atan2( m32, m22 );
|
|
|
|
- this._z = 0;
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ this._x = Math.atan2( m32, m22 );
|
|
|
|
+ this._z = 0;
|
|
|
|
|
|
- } else if ( order === 'YXZ' ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- this._x = Math.asin( - clamp( m23, - 1, 1 ) );
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
- if ( Math.abs( m23 ) < 0.9999999 ) {
|
|
|
|
|
|
+ case 'YXZ':
|
|
|
|
|
|
- this._y = Math.atan2( m13, m33 );
|
|
|
|
- this._z = Math.atan2( m21, m22 );
|
|
|
|
|
|
+ this._x = Math.asin( - clamp( m23, - 1, 1 ) );
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ if ( Math.abs( m23 ) < 0.9999999 ) {
|
|
|
|
|
|
- this._y = Math.atan2( - m31, m11 );
|
|
|
|
- this._z = 0;
|
|
|
|
|
|
+ this._y = Math.atan2( m13, m33 );
|
|
|
|
+ this._z = Math.atan2( m21, m22 );
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- } else if ( order === 'ZXY' ) {
|
|
|
|
|
|
+ this._y = Math.atan2( - m31, m11 );
|
|
|
|
+ this._z = 0;
|
|
|
|
|
|
- this._x = Math.asin( clamp( m32, - 1, 1 ) );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- if ( Math.abs( m32 ) < 0.9999999 ) {
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
- this._y = Math.atan2( - m31, m33 );
|
|
|
|
- this._z = Math.atan2( - m12, m22 );
|
|
|
|
|
|
+ case 'ZXY':
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ this._x = Math.asin( clamp( m32, - 1, 1 ) );
|
|
|
|
|
|
- this._y = 0;
|
|
|
|
- this._z = Math.atan2( m21, m11 );
|
|
|
|
|
|
+ if ( Math.abs( m32 ) < 0.9999999 ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ this._y = Math.atan2( - m31, m33 );
|
|
|
|
+ this._z = Math.atan2( - m12, m22 );
|
|
|
|
|
|
- } else if ( order === 'ZYX' ) {
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- this._y = Math.asin( - clamp( m31, - 1, 1 ) );
|
|
|
|
|
|
+ this._y = 0;
|
|
|
|
+ this._z = Math.atan2( m21, m11 );
|
|
|
|
|
|
- if ( Math.abs( m31 ) < 0.9999999 ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- this._x = Math.atan2( m32, m33 );
|
|
|
|
- this._z = Math.atan2( m21, m11 );
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ case 'ZYX':
|
|
|
|
|
|
- this._x = 0;
|
|
|
|
- this._z = Math.atan2( - m12, m22 );
|
|
|
|
|
|
+ this._y = Math.asin( - clamp( m31, - 1, 1 ) );
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( Math.abs( m31 ) < 0.9999999 ) {
|
|
|
|
|
|
- } else if ( order === 'YZX' ) {
|
|
|
|
|
|
+ this._x = Math.atan2( m32, m33 );
|
|
|
|
+ this._z = Math.atan2( m21, m11 );
|
|
|
|
|
|
- this._z = Math.asin( clamp( m21, - 1, 1 ) );
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- if ( Math.abs( m21 ) < 0.9999999 ) {
|
|
|
|
|
|
+ this._x = 0;
|
|
|
|
+ this._z = Math.atan2( - m12, m22 );
|
|
|
|
|
|
- this._x = Math.atan2( - m23, m22 );
|
|
|
|
- this._y = Math.atan2( - m31, m11 );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
- this._x = 0;
|
|
|
|
- this._y = Math.atan2( m13, m33 );
|
|
|
|
|
|
+ case 'YZX':
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ this._z = Math.asin( clamp( m21, - 1, 1 ) );
|
|
|
|
|
|
- } else if ( order === 'XZY' ) {
|
|
|
|
|
|
+ if ( Math.abs( m21 ) < 0.9999999 ) {
|
|
|
|
|
|
- this._z = Math.asin( - clamp( m12, - 1, 1 ) );
|
|
|
|
|
|
+ this._x = Math.atan2( - m23, m22 );
|
|
|
|
+ this._y = Math.atan2( - m31, m11 );
|
|
|
|
|
|
- if ( Math.abs( m12 ) < 0.9999999 ) {
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- this._x = Math.atan2( m32, m22 );
|
|
|
|
- this._y = Math.atan2( m13, m11 );
|
|
|
|
|
|
+ this._x = 0;
|
|
|
|
+ this._y = Math.atan2( m13, m33 );
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- this._x = Math.atan2( - m23, m33 );
|
|
|
|
- this._y = 0;
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ case 'XZY':
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ this._z = Math.asin( - clamp( m12, - 1, 1 ) );
|
|
|
|
+
|
|
|
|
+ if ( Math.abs( m12 ) < 0.9999999 ) {
|
|
|
|
+
|
|
|
|
+ this._x = Math.atan2( m32, m22 );
|
|
|
|
+ this._y = Math.atan2( m13, m11 );
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ this._x = Math.atan2( - m23, m33 );
|
|
|
|
+ this._y = 0;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
|
|
- console.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );
|
|
|
|
|
|
+ console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|