Hi Dean,
if you concatenate multiple transforms the code won't work.
For a matrix there exists more than one solution for the angles around X, Y, and
Z axis. One solution could be found a tuple of euler anlges, see:
http://users.ece.gatech.edu/~slabaugh/personal/research/euler/euler.html
I hope this helps.
bye.
Dani.
Dean Keeler wrote:
> 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".