If you use +psi as + Z rotation, +tht as +Y rotation and +phi as +X rotation
then,
tht = asin(m02),
psi = -atan(m01/m00)
phi = -atan(m12/m22)


If you need other rotations, they can be derived in any order.

> Hope this helps.
>
> ----------
> From:         Dean Keeler[SMTP:[EMAIL PROTECTED]]
> Reply To:     Discussion list for Java 3D API
> Sent:         Tuesday, April 25, 2000 8:20 AM
> To:   [EMAIL PROTECTED]
> Subject:      [JAVA3D] Calculating angles from a Matrix3d Object
>
> Hi,
>
> I am trying (have been trying for a while) how to calculate the angular
> values around X, Y, and Z from a Matrix3d object.  I am trying to echo
> positional data of a vrml object to the user.  I get the Transform3D
> object
> from the TransformGroup vrml node and then get the matrix3d object and the
> vector3d object from the Transform3D object.  From there I want to
> calculate
> the angular position of the object.  Can anyone help me.  I am not a math
> wizard, so any help would be appreciated.  The code I am using is as
> follows:
>
> public void updatePositions(TransformGroup tg)
> {
>         double                  x=0.0,y=0.0,z=0.0,a=0.0,b=0.0,c=0.0;
>         double                  values[] = new double[4];
>         Matrix3d                m = new Matrix3d();
>         Vector3d                v = new Vector3d();
>         Transform3D             t = new Transform3D();
>         AxisAngle4d             aa = new AxisAngle4d();
>         NumberFormat    nf = NumberFormat.getNumberInstance();
>
>         nf.setMinimumIntegerDigits(1);
>         nf.setMaximumIntegerDigits(9);
>         nf.setMaximumFractionDigits(4);
>         nf.setMinimumFractionDigits(4);
>         nf.setGroupingUsed(false);
>
>         tg.getTransform(t);
>         t.get(m,v);
>
>         //"X" axis
>         x = v.x;
>         xPos.setText(nf.format(x));
>
>         //"Y" axis
>         y = v.y;
>         yPos.setText(nf.format(y));
>
>         //"Z" axis
>         z = v.z;
>         zPos.setText(nf.format(z));
>
>         //"A axis"
>         a = Math.toDegrees(Math.acos(m.m22));
> //      if (m.m21 > -1.0 && m.m21 < 1.0) a = 90.0 +
> Math.toDegrees(Math.asin(m.m11));
> //      else if (m.m21 <= -1.0) a = -180.0;
> //      else if (m.m21 >= 1.0) a = 180.0;
>         aPos.setText(nf.format(a));
>
>         //"B Axis"
>         b = Math.toDegrees(Math.acos(m.m00));
> //      if (m.m02 > -1.0 && m.m02 < 1.0) b = 90.0 +
> Math.toDegrees(Math.asin(m.m02));
> //      else if (m.m02 <= -1.0) b = -180.0;
> //      else if (m.m02 >= 1.0) b = 180.0;
>         bPos.setText(nf.format(b));
>
>         //"C Axis"
>         c = Math.toDegrees(Math.acos(m.m11));
> //      if (m.m10 > -1.0 && m.m10 < 1.0) c = 90.0 +
> Math.toDegrees(Math.asin(m.m10));
> //      else if (m.m10 <= -1.0) c = -180.0;
> //      else if (m.m10 >= 1.0) c = 180.0;
>         cPos.setText(nf.format(c));
> }
>
>
> Thanks for you help
>
> Dean Keeler
> CNC Connection Corporation
> [EMAIL PROTECTED]
>
> ==========================================================================
> =
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the
> body
> of the message "signoff JAVA3D-INTEREST".  For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
>

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to