3

Let R be a rotation matrix in three-dimensional euclidean space, R ∈ SO(3). Let v be a unit vector in said space.

Is it possible to decompose R into matrices A and B so that following holds?

  • AB = R
  • A is a rotation around the axis indicated by v

If it is possible, how can it be done?

muaddib
  • 8,267
Emiswelt
  • 133
  • 1
    $A$ is invertible; so, $B=A^{-1}R$. – Michael Galuza Jul 16 '15 at 12:32
  • 1
    So in particular, $A = I$ and $B = R$ is a solution – Niklas B. Jul 16 '15 at 12:34
  • 1
    Do you need explicit formula for rotation around $\vec v$? – Michael Galuza Jul 16 '15 at 12:45
  • 2
    This seems to be much less constrained than other procedures that are called "decomposition." Basically you can take any rotation around $v$, call it $A$, then write the matrix product $AB=R$. Are you sure there are not any additional properties you want $B$ to have, other than making this equation true? – David K Jul 16 '15 at 12:50
  • Indeed, I did not define the problem very well. I could say that I don't want B to have any rotational components around v, but I'm not sure whether that even makes sense. – Emiswelt Jul 16 '15 at 14:22

3 Answers3

3

You can solve for $B$ as follows. Let $R$ be the rotation you specified, and $A$ be any rotation around the axis indicated by $v$. Then define $$B = A^{-1}R$$ $A$ has an inverse since all rotations do. Now $$AB = R$$

muaddib
  • 8,267
  • How is it possible to get the rotation around the axis indicated by v? Niklas B suggested using a vector w that's orthogonal to v and apply R. However, It's possible that for different w the result is different, for example when we rotate by 90° around the axis orthogonal to v and w, than A will always be I. – Emiswelt Jul 16 '15 at 12:39
  • 1
    @Emiswelt There are many possible solutions to the problem. You will find a $B$ for each $A$ you choose. – muaddib Jul 16 '15 at 12:41
  • 1
3

You already seen that $B = A^{-1} R$, but what is $A$?

Use the rotation $\varphi$ about an axis $\bf v$ formula defined as

$$ A = \mathbf{1}+(\sin\varphi) [\mathbf{v}\times] + (1-\cos\varphi) [\mathbf{v}\times][\mathbf{v}\times]$$

where $[\mathbf{v}\times]$ is the 3×3 skew symmetric cross product operator. It follows that

$$ A^{-1} = \mathbf{1}-(\sin\varphi) [\mathbf{v}\times] + (1-\cos\varphi) [\mathbf{v}\times][\mathbf{v}\times]$$

So now we have an expression for $B$ in terms of the angle $\varphi$

$$ B(\varphi) = R -(\sin\varphi) \mathbf{v}\times R + (1-\cos\varphi) \mathbf{v}\times \mathbf{v}\times R $$

To find $\varphi$ I suggest taking the trace if $B$ and maximizing it. Why? The trace of any 3×3 rotation matrix is: ${\rm trace}(R(\theta))=(1+2\cos\theta)$ with a maximum value at $\theta=0$. By maximizing the trace we are finding rotation $\varphi$ which yields the smallest rotation $B$.

NOTE:

The trace of a combined rotation is $${\rm trace}( {\rm Rot}(\mathbf{u},\varphi){\rm Rot}(\mathbf{v},\theta)) =\\ n^2+\cos\theta (1-n^2)+\cos\varphi(1-n^2+\cos\theta(1+n^2))-2(\sin\varphi\sin\theta) n$$

where $n=\mathbf{v}\cdot\mathbf{u}$ is the dot product of the two axes.

John Alexiou
  • 13,816
3

As the other answers note, $B = A^{-1}R$, or equivalently $BR^{-1} = A^{-1}$.

If you would like the Axis/Angle representations of $A$ and $B$ to be orthogonal (i.e. so that $AA(A) \cdot AA(B) = 0$), it is possible to do this explicitly without solving an optimization problem.

First, if $AA(A) || v$, then choose some vector $w$ s.t. $w \cdot v = 0$.

Now we want to find the matrix $B$ s.t. $BR^{-1} w \cdot v = 0$.

To do this, we first compute a (normalized) projection $p = \frac{R^{-1}w - (R^{-1}w \cdot v)v}{||R^{-1}w - (R^{-1}w \cdot v)v||}$ (Formula to project a vector onto a plane).

Now we compute $B$ to be the matrix that rotates $R^{-1}w \rightarrow p$ (Calculate Rotation Matrix to align Vector A to Vector B in 3d?).

The resulting matrix ($BR^{-1} || RB^{-1} = A$) fixes the axis $v$ by construction, and $B$ must fix an axis orthogonal to $v$.

thefool
  • 31