# Interpolation between three-dimensional rotations

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.

• 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? – math_seeker Feb 19 at 3:38
• What do you think? – timur Feb 19 at 4:52
• I think that would be give me the intermediate rotation matrices I want. – 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]$$