In order to calculate the rotation about any arbitrary point we need to calculate its new rotation and translation. In other words rotation about a point is an 'proper' isometry transformation' which means that it has a linear and a rotational component.
Assume we have a matrix [R0] which defines a rotation about the origin:
We now want to apply this same rotation but about an arbitrary point P:
As we can see its orientation is the same as if it had been rotated about the origin, but it has been translated to a different point on space by the rotation.
In order to prove this and to calculate the amount of linear translation we need to replace:
- translate about arbitrary point P (Px,Py,Pz).
With the following 3 simpler transforms which, when done in order, are equivalent:
- translate the arbitrary point to the origin (subtract P which is translate by -Px,-Py,-Pz)
- rotate about the origin (can use 3×3 matrix R0)
- then translate back. (add P which is translate by +Px,+Py,+Pz)
So if we are using the global frame-of-reference (as explained here)
[resulting transform] = [third transform] * [second transform] * [first transform]
[resulting transform] = [+Px,+Py,+Pz] * [rotation] * [-Px,-Py,-Pz]
Note for matrix algebra, the order of operations is important, so these translations do not cancel out.
So matrix representing rotation about a given point is:
[R] = [T]-1 * [R0] * [T]
[T]-1 = inverse transform = translation of point to origin
[R0] = rotation about origin (if this is not clear see this discussion)
[T] = translation of origin to point
when these matrices are multiplied this will give the following result for rotation about x,y:
multiply second two terms
|r00||r01||r02||x - r00*x - r01*y - r02*z|
|r10||r11||r12||y - r10*x - r11*y - r12*z|
|r20||r21||r22||z - r20*x - r21*y - r22*z|
So the rotational components are the same but the rotation moves the position of the centre.
You may be interested in other means to represent orientation and rotational quantities such as:
Or you may be interested in how these quantities are used to simulate physical objects: