Micheal, I encountered the same problem few months ago. Here I paste the result of some mail exchanges that helped me to solve the problem. Hope It's useful. Read from bottom to top to understand something ;-)
F.
======================================
Hi Fabrizio,
Sorry, but I conveniently omitted Craig's discussion of the problems when beta is near +/- pi/2. He suggests that for beta near pi/2, alpha=0 and gamma=atan2(r_12,r_22). For beta near -pi/2, alpha=0 and gamma=-atan2(r_12,r_22).
This is one of the pitfalls associated with using spherical coord's. As Ian points out, the quaternion concept is not subject to these ambiguities, and it is the preferred way to implement code. But Euler angles are the intuitive way to represent angles, and that's how I represent a rotation matrix when displaying it for the user (most frequently when debugging). The quaternion representing the 3D rotation is simply converted to a rotation matrix, then to Euler angles in a print method. couldn't get this to go to the interest list for some reason... --Mark
----- Original Message ----- From: "Fabrizio NUNNARI" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, June 18, 2003 3:43 AM Subject: [spam: 11.00/05.00] Re: [JAVA3D] Transform3D and angles issue (fwd)
> Implemented. It works, but... > > For little angles I get: > Setting angles <0.0,0.5699999999999998,0.0> > Back-calculated euler angles are alpha=0.0, beta=0.5699999999999998, > gamma=0.0 > > but when I pass the PI/2 rotation: > Setting angles <0.0,-2.1600000000000006,0.0> > Back-calculated euler angles are alpha=-3.141592653589793, > beta=-0.9815926535897926, gamma=-3.141592653589793 > > I know the result is the same, but... > Any further suggestion? Otherwise I'll keep it like that. > > > Mark Whitehorn wrote: > > A good reference for this sort of thing is Chapter 2 of "Introduction to > > Robotics Mechanics and Control" by John J. Craig (Addison Wesley). Here's > > equation 2.66 from section 2.8: > > > > beta = atan2(-r_31, sqrt(r_11^2 + r_21^2)) > > alpha = atan2(r_21/cos(beta), r_11/cos(beta)) > > gamma = atan2(r_32/cos(beta), r_33/cos(beta)) > > > > alpha, beta, gamma are ZYX Euler angles for the 3x3 rotation matrix > > r_ij... > > > > It's just trigonometry. > Just... ;-) > > > > > Good luck with the PhD, > I'll need it.... > > Fabrizio > > > Mark > > > > > > > >>----- Original Message ----- > >>From: "Fabrizio NUNNARI" <[EMAIL PROTECTED]> > >>To: <[EMAIL PROTECTED]> > >>Sent: Tuesday, June 17, 2003 9:48 AM > >>Subject: [spam: 07.00/05.00] [JAVA3D] Transform3D and angles issue > >> > >> > >> > >>>Hello, > >>> > >>>I'm getting confused by the tons of methods of the Transform3D class. > >>>Is it possible to retrieve the rotational component stored in a matrix? > >>>I mean "just the three angles around the three axes". > >>> > >>>I normally use the (misleading, at least for me) .setEuler(Vector3d > >>>euler) method. I'm looking for an equivalent .getEuler(Vector3d euler) > >> > >>one. > >> > >>>I also saw a .set(AxisAngle4d a1). I never tried it, but a corresponding > >>>.get(AxisAngle4d a1) doesn't exist. > >>> > >>>Finally, there is the copule .get/.set(Quat4d rot), but I haven't been > >>>able to understand the relation between the stored (normalized) values > >>>and angles value. > >>> > >>>What's the difference between .setEuler(Vector3d), .set(AxisAngle4d) and > >>>.set(Quat4d rot) ???? > >>> > >>> > >>> > >>>The purpose? I have an object moved/rotated by a TransfromGroup. I want > >>>to rotate it around a generic axes and then retrieve and print out the > >>>resulting rotation angles (in the "Euler" form). > >>> > >>>Is it possible? > >>> > >>> > >>>thanks, > >>>Fabrizio NUNNARI > >>> > >>>-- > >>>Fabrizio Nunnari (nunnarif at di.unito.it) > >>>PhD Student - Computer Science Department - Torino - Italy > >>>http://www.di.unito.it/~nunnarif/ > >>> > >>> > >> > >
-- Fabrizio NUNNARI (nunnarif at di.unito.it) PhD Student - Computer Science Department - University of Torino - Italy http://www.di.unito.it/~nunnarif
=========================================================================== 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".