Daniel,

In the code you sent, isn't your code assuming that there is only one
rotation?

Chris.

BTW do you have the internet address of that FAQ?

On Sat, 1 May 1999, Daniel Selman wrote:

> Guillaume,
> 
> This is the code that we use here. It was adapted from the algorithm
> described in "The Matrix and Quaternion FAQ" (a good read).
> 
> Note that the results are in radians - use Math.toDegrees(...) to convert to
> degrees.
> 
> Hope it works out for you - let me know if you have any problems or find any
> bugs.
> 
> Best,
> 
> Daniel Selman
> Tornado Labs Ltd.
> 
> === code follows ===
>               Matrix3d m1 = new Matrix3d();
>               m_Transform3D.get( m1 );
> 
>               // extract the rotation angles from the upper 3x3 rotation
>               // component of the 4x4 transformation matrix
>           m_Rotation.y = -java.lang.Math.asin( m1.getElement( 2, 0 ) );
>           double c = java.lang.Math.cos( m_Rotation.y );
>               double tRx, tRy, tRz;
> 
>               if( java.lang.Math.abs( m_Rotation.y ) > 0.00001 )
>               {
>                       tRx = m1.getElement( 2, 2 ) / c;
>                       tRy = -m1.getElement( 2, 1 )  / c;
> 
>                       m_Rotation.x = java.lang.Math.atan2( tRy, tRx );
> 
>                       tRx = m1.getElement( 0, 0 ) / c;
>                       tRy = -m1.getElement( 1, 0 ) / c;
> 
>                       m_Rotation.z = java.lang.Math.atan2( tRy, tRx );
>               }
>               else
>               {
>                       m_Rotation.x  = 0.0;
> 
>                       tRx = m1.getElement( 1, 1 );
>                       tRy = m1.getElement( 0, 1 );
> 
>                       m_Rotation.z = java.lang.Math.atan2( tRy, tRx );
>               }
> 
>               m_Rotation.x = -m_Rotation.x;
>               m_Rotation.z = -m_Rotation.z;
> 
>               // now try to ensure that the values are positive by adding 2PI if
> necessary...
>               if( m_Rotation.x < 0.0 )
>                       m_Rotation.x += 2 * java.lang.Math.PI;
> 
>               if( m_Rotation.y < 0.0 )
>                       m_Rotation.y += 2 * java.lang.Math.PI;
> 
>               if( m_Rotation.z < 0.0 )
>                       m_Rotation.z += 2 * java.lang.Math.PI;
=====================================================================
To subscribe/unsubscribe, send mail to [EMAIL PROTECTED]
Java 3D Home Page: http://java.sun.com/products/java-media/3D/

Reply via email to