I have to define a continuous function $g: [0, 1] \rightarrow \mathrm{SO}(3)$ such that $g(0) = I$ and $g(1) = R$ (a given rotation).

I know we can do this kind of interpolation using quaternions and slerp. But, the question says think along the lines of angle-axis parameterization. Any hints regarding how to interpolate between two rotations in $\mathrm{SO}(3)$ using angle-axis parameterization. Moreover, the function $g$ should give $R \in \mathrm{SO}(3)$. Thanks for the help!


Hint: Any element in SO(3) is a rotation around an axis.

  • $\begingroup$ So, I know from g(1) = R the final angle of rotation about some axis of rotation. Can I just linearly interpolate from 0 to that particular angle about that axis of rotation? $\endgroup$ – math_seeker Feb 19 at 3:38
  • $\begingroup$ What do you think? $\endgroup$ – timur Feb 19 at 4:52
  • 1
    $\begingroup$ I think that would be give me the intermediate rotation matrices I want. $\endgroup$ – math_seeker Feb 19 at 10:22

Even though this is a late answer, I think this might add some good points to the post:

  1. To find the axis of rotation for $R$, assuming that it's not degenerate like $R=I_{3\times 3}$ (the identity matrix), solve the linear system $(R-I)\begin{bmatrix}x & y & z\end{bmatrix}^t = 0$.
  2. Once you have found the axis of rotation, let's call it $\vec{a}=(a_1,a_2,a_3)$, you can see using the Euler-Rodrigues' formula that $R$, as a linear transformation, is given by

$$R=e^{\theta \vec{a}}=\cos(\theta)I_{3\times 3}+\sin(\theta)[a]_{\times}+\big(1-\cos(\theta)\big)\begin{bmatrix}a_1 & a_2 & a_3\end{bmatrix}\begin{bmatrix}a_1 \\a_2\\a_3\end{bmatrix}$$

Where $[a]_{\times}$ denotes the cross-product matrix associated to the linear transformation $A:\mathbb{R}^3 \to \mathbb{R}^3$ given by $A(\vec{v}) = \vec{a} \times \vec{v}$. You can see that $[\vec{a}]_{\times}$ is anti-symmetric. Also, $$\mathrm{tr}\bigg(\begin{bmatrix}a_1 & a_2 & a_3\end{bmatrix}\begin{bmatrix}a_1 \\ a_2 \\ a_3\end{bmatrix}\bigg)=\|\vec{a}\|^2$$

Assuming that $\|\vec{a}\|=1$ Taking trace from both sides yields

$$\mathrm{tr}(R)=3\cos(\theta)+\sin(\theta)\times 0+(1-\cos(\theta))\times1$$

$$\cos(\theta) = \frac{\mathrm{tr}(R)-1}{2}$$

$$\theta = \arccos(\frac{\mathrm{tr}(R)-1}{2})$$

Now you know the angle of rotation as well. To find your desired interpolation, consider

$$\large R(t)=e^{t\theta\vec{a}} \,\,\, \text{for t}\in [0,1]$$


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.