[comp.graphics] Euler's rotation

mpogue@vis01.dg.com (Mike Pogue) (07/02/90)

   I have read in several papers, books, etc, that Euler 
proved a famous theorem in 1752 (or whenever), showing that
for any two orientations of the same object, that there
was a single rotation about a single axis that would 
transform one rotation to the other.

   Although the result is mentioned, the actual formula/
algorithm for calculating the axis of rotation and rotation
angle is never given!

   Does anybody have this formula handy?


Mike Pogue
Data General

Speaking for myself, not my company....

banks@proline.cs.unc.edu (David Banks) (07/04/90)

mpogue@dg.dg.com writes:
>
>  ... Euler proved ... that for any two orientations ... 
>  a single rotation ... would transform one rotation to the other.
>
>  ... Does anybody have this formula handy?


Mike Pique's paper, "Semantics of Interactive Rotations"
(Proceedings, 1986 Chapel Hill Workshop on Interactive 3D Graphics, 
p. 268) offers a formula which, given a rotation matrix R, 
computes a direction vector V and a rotation angle theta:

cos(theta) = (R11 + R22 + R33 - 1)/2

Vx = (R32 - R23)/(2 sin(theta) )
Vy = (R13 - R31)/(2 sin(theta) )
Vz = (R21 - R12)/(2 sin(theta) )

turk@Apple.COM (Ken "Turk" Turkowski) (08/13/90)

In article <580@dg.dg.com> mpogue@dg.dg.com writes:
>
>   I have read in several papers, books, etc, that Euler 
>proved a famous theorem in 1752 (or whenever), showing that
>for any two orientations of the same object, that there
>was a single rotation about a single axis that would 
>transform one rotation to the other.
>
>   Although the result is mentioned, the actual formula/
>algorithm for calculating the axis of rotation and rotation
>angle is never given!
>
>   Does anybody have this formula handy?

See my paper "The Use of Coordinate Transformations in Computer
Graphics" in Academic Press's new Graphics Gems book.  One of the
examples computes the 3x3 matrix for this transformation.

If you really need the axis and angle, you might be able to do this
by computing the eigenvectors of the matrix.  I believe that Ned
Greene has a paper in Graphics Gems on how to extract rotations
from a matrix.
-- 
Ken Turkowski @ Apple Computer, Inc., Cupertino, CA
Internet: turk@apple.com
Applelink: TURK
UUCP: sun!apple!turk

mpogue@vis01.dg.com (Mike Pogue) (08/14/90)

In article <9715@goofy.Apple.COM>, turk@Apple.COM (Ken "Turk" Turkowski)
writes:
|> In article <580@dg.dg.com> mpogue@dg.dg.com writes:
|> >
|> >   Does anybody have this formula handy?
|> 
|> If you really need the axis and angle, you might be able to do this
|> by computing the eigenvectors of the matrix.  I believe that Ned


   Thanks....I was actually able to derive the result, as a product of
three quaternions.  Once I realized that I could use quaternion 
arithmetic, the three rotations were pretty easy.  I'm sure that there
is a closed form that would be much simpler, but I haven't had time to
teach Mathematica about quaternions, so I could auto-simplify my
expressions.  I don't have enough time to sit down and do it by hand.

Mike Pogue
Data General Corp.

  Speaking for myself alone....