Composition of two axis-angle rotations

19.9k Views Asked by At

Please note that I am not referring to Euler angles of the form (α,β,γ). I am referring to the axis-angle representation, in which a unit vector indicates the direction axis of a rotation and a scalar the magnitude of the rotation.

Let $(\hat{n_1},\theta_1)$ refer to the first rotation and $(\hat{n_2},\theta_2)$ refer to the second rotation. What is the value of the first rotation followed by the second rotation, in axis-angle representation?

I understand that the composition of two rotations represented by quaternions $q_1$ and $q_2$ is equal to their product $q_2q_1$. Is there a way to find the composition of axis-angle rotations (without having to convert them to quaternions, multiply them, and convert them back to axis-angle) in a similar manner? Is there a simplified formula for this operation?

3

There are 3 best solutions below

1
On

I do not believe there is without passing through some alternate representation (quaternion, matrix, ...). This is one of the known disadvantages of axis-angle compared to the others, while an advantage is the triviality of inversion (simply negate the angle or the axis).

1
On

The quaternion procedure is probably the simplest, easiest to implement, and most computationally economical way to go.

In practice you would likely be doing all of this in a computer anyhow, and computing the product of two quaternions (in the big scheme of things) is not much harder than two real numbers, or two complex numbers. I think the multiplication is more computatationally efficient than multiplying two $3\times 3$ matrices, at least.

Actually, if you sit down and work the quaternion solution, you can probably work out a formula completely in terms of the coordinates of the $n_i$ and the angles $\theta_i$. It would be monstrous, but it would be totally in terms of your data (and maybe inverse trigonometric functions.)

0
On

I'm not sure if this is simpler or more complex. This reworks the formulae to combine the angles before taking the sin/cos. I had started with this... https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#The_composition_of_spatial_rotations and ended up feeding the partials to wolfram alpha, and getting equivalent functions.

https://github.com/d3x0r/stfrphysics#live-demos implement this method; it is equivalent.

given

  • ${Q} = [n,\theta]$ n is a normal vector/axis of rotation

  • ${P} = [n,\theta]$ $\theta$ is the angle of rotation - often positive.

  • composite result, of Q rotated around P.

    • $ R_{\theta} = 2 cos^{-1}(\frac { {\cos (\frac {{ Q_\theta} - P_{\theta}} 2)}( 1 - (Q_n \cdot P_n) ) + {\cos (\frac {{ Q_\theta} + P_{\theta}} 2) }(1+(Q_n \cdot P_n)) } 2 ) $

    • $ R_n = ( Q_n \times P_n ) ({\cos (\frac {{ Q_\theta} - P_{\theta}} 2)}-{ \cos (\frac {{ Q_\theta} + P_{\theta}} 2) }) + P_n ({\sin (\frac {{ Q_\theta} + P_{\theta}} 2)}+{\sin (\frac {{ Q_\theta} - P_{\theta}} 2)}) + Q_n ({\sin (\frac {{ Q_\theta} + P_{\theta}} 2)}-{\sin (\frac {{ Q_\theta} - P_{\theta}} 2)}) $

-or-

  • $ A = Q_n \cdot P_n $

  • $ B = \cos \frac {{ Q_\theta} + P_{\theta}} 2 $

  • $ C = \cos \frac {{ Q_\theta} - P_{\theta}} 2 $

  • $ D = \frac { C( 1 - A ) + B(1+A) } 2 $

  • $ {Result}_{\theta} = 2 \arccos( D ) $

if $ {Result}_{\theta} = 0 $

  • then the two rotations are co-incidental the axis is left unmodified.

else

  • $ E = \sin \frac {{ Q_\theta} + P_{\theta}} 2 $
  • $ F = \sin \frac {{ Q_\theta} - P_{\theta}} 2 $
  • $ G = ( Q_n \times P_n ) (C-B) + P_n (E+F) + Q_n (E-F) $
  • $ {Result}_n = \frac G {||G||} $

$ {Result} = Result_{\theta} {Result}_n $