Rotation matrices: global vs. local

Recently I came across the problem of rotating an object in 3d realtime application around its local axis. To give the answer instantly: It is done like rotation around world axis but in reverse order of rotations.

Usually you will use the standard rotation matrices around X, Y, Z axis to rotate a point or vector around the respective world axis. Instead rotating around a local axis rotates the object around an axis that already has been rotated before. So local rotation only makes sense for consecutive rotations. If you only do one rotation on an object that has not been rotated so far, local and global axis are equal.

Local rotation is equal to world rotation in reverse order. Why? This can be explained by looking at the way rotation matrices change vector basis. According to this article we observed that a rotation matrix does a vector basis change from the rotated basis it represents to the standard basis or more general to the basis the coordinates of the vector or point you rotate are related to. This is the reason why the standard rotation matrices always do a world like rotation. They do not transform the vector or point to its rotated coordinate system. Local rotation instead has to describe a rotation in respect to the coordinate system of the before applied rotation. Consider two rotations $R_{1}$ and $R_{2}$ applied to a vector $v$:

$R_{2}\cdot R_{1}\cdot v=v‘$

In that order the rotation $R_{1}$ would be applied first and $R_{2}$ afterwards. Now we want $R_{2}$ to perform a local rotation. Local means here that $R_{2}$ is done in respect to the rotated vector basis $R_{1}$ represents. In order to transform coordinates into the vector basis of a rotation matrix we have to apply the inverted rotation matrix. For this example this looks like this:

$R_{2}\cdot R_{1}^{-1} \cdot R_{1}\cdot v=v‘$

But from the moment that we apply $R_{1}^{-1}$ we are working in the coordinate system of $R_{1}$. So we have to transform back to the original coordinate system $v$ was defined in by applying $R_{1}$ once again after doing the local rotation:

$R_{1} \cdot R_{2}\cdot R_{1}^{-1} \cdot R_{1}\cdot v=v‘$

This is the full term now, but we see that $R_{1}^{-1} \cdot R_{1}$ equals the identity matrix and thus can be cut out. This gives the final result:

$R_{1}\cdot R_{2}\cdot v=v‘$

So the order of rotations has just changed in order to apply $R_{2}$ as a local rotation, what proves the above given solution to the problem. This change of order gives us another hint on consecutive rotations: If you have a matrix multiplication representing consecutive rotations you can always interpret it in both directions: From left to right (like you read) every rotation is applied on local axis. From right to left every rotation is applied on world (global) axis. Again: These are possible interpretations of a series of rotations. The nice thing here is that we still only use the standard rotation matrices and do not have extra costs but just change the order.

Author: Michael Keutel | 11.05.2015