Given the latitude and longitude of a prior planetary rotation axis (or pole), and given a set of latitude and longitude points defining a number of features on the surface of the planet, determine the latitude and longitude points describing the location of the features in the prior rotational regime.

I know. Someone’s already solved this problem. His name was Euler, and he did it in a more general case. So much more general, that all of the descriptions I can find of his solutions are a little opaque.

I’m not trying to describe a completely arbitrary re-orientation, because the point I’m moving is one of the poles. I only need two angles to describe the transformation… α (the east positive longitude of the paleopole) and β (the co-latitude, south from the current north pole, of the paleopole). So in using, for instance, the 3-rotation **z-x-z** convention, the last rotation is null. Its matrix is the identity matrix. Okay. So far so good.

But these rotations are in terms of Cartesian coordinates:

[x y z][**R**] = [X Y Z]

where **R** is the rotation matrix:

cos α | -sin α cos β | sin β sin α |

sin α | cos α cos β | -sin β cos α |

0 | sin β | cos β |

(from the Wikipedia entry on Euler angles, taking the third Euler angle, γ = 0).

Seems simple enough. So now all I need to do is convert my lat/lon points into Cartesian (x,y,z) before I apply the rotation:

x = r sin θ cos φ

y = r sin θ sin φ

z = r cos θ

(where θ is co-latitude south from the north pole, and φ is east positive longitude), and apply the inverse transform on the way back to lat/lon after applying the transformation:

r = sqrt(x^{2} + y^{2} + z^{2})

θ = arctan(sqrt(x^{2} + y^{2})/z)

φ = arctan(y/x).

Just to be sure, after I’ve applied these transformations, how am I going to know that I haven’t screwed anything up? For one thing, the spherical lengths of all the features should be invariant under these transformations. The radial coordinate (r) also shouldn’t change… since I’m doing this all on the surface of the sphere. And I should be able to output orthographically projected maps that look identical before and after the transform, assuming that I’ve also transformed the center point of the map. We’ll see…

## One reply on “The Rotation Problem”

So, it turns out that the above works… insofar as it takes a paleopole and puts it at the north pole, re-orienting everything else on the surface in the process. However, it isn’t a minimal re-orientation, and introduces some variable amount of longitudinal translation, that I’d rather avoid. In order to simply take the paleopole and move it north until it’s at the north pole (dragging everything else along with it), I first need to slew the paleopole over to the longitude which is 90° away from the axis that the angle β rotates the body around (adjusting α), and then after moving the pole north, undo that longitudinal slew (adjusting the output longitude of the transform by α). However, the signs of the quantities involved are baffling me at the moment…