It's time I admit I don't know what Rodrigues vectors are

Forgive this naive question, but I still don’t really understand what cryoSPARC’s pose3D actually represents. I understand that the numbers somehow describe a unique rotation in 3D space, but not what each number is, or how to interpret them compared to, say, RELION’s ZY’Z’’ which I do (theoretically) understand.

Does anyone have an intuitive explanation of what these numbers are, or a resource I could learn them from? As I have found is often true, the wikipedia article on the topic is a bit over my head.

Thank you!


Hey @posertinlab – I can take a quick stab at this to kick things off!

First: regarding the name. The most unambiguous way to define the CryoSPARC rotation parameterization is probably ‘axis-angle vector’ or a ‘rotation vector’ (a ‘Rodrigues vector’ could also refer to another related parameterization called the modified Rodrigues parameterization). The axis-angle vector is a three-dimensional vector, x, with a magnitude phi, and direction n.

We think of each of these 3-vectors as defining a rotation in the following way: look down along the direction n and rotate counter-clockwise by phi radians (i.e., rotate ‘about’ n in the same way that each Euler angle in the ZY’Z" sequence rotates about one coordinate axis). The (rather elegant) result that one can represent an arbitrary rotation with an axis and a rotation about that axis is due to Euler’s rotation theorem. Moreover, it turns out that this is almost a 1-to-1 mapping if we restrict phi < pi (the only set of rotations one misses this way are those that rotate by ‘pi’ or 180 degrees–these are a special, important case which end up breaking this nice embedding, but I digress).

There’s no ‘intuitive’ way that I know of to map the axis-angle parameters to an Euler-angle sequence unless you have the special case where n is one of the coordinate axes (e.g., [a, 0, 0] rotates by a radians about the x-axis).

Here’s one resource that may be useful:
(various online explanations – more readable than wiki)


Also check out:


and especially
where in Ch 3 there is an nice explanation of how you get a 3-ball (solid ball of values for axis-angle vectors) as the locally flat tangent space of the 4-sphere (hollow 4D shell of values for quaternions).

@vperetroukhin’s explanation is exactly right: unit vectors pointing in the viewing direction, scaled by the in-plane rotation. Unfortunately understanding this encoding of rotation is much easier than understanding how they all relate. The conversion functions in pyem.geom cover all the representations and are mutually consistent with the cryoSPARC/Relion conventions if you want to see. I admit I found most of them through trial and error.

Oh, also it’s pretty intuitive that the “viewing direction” unit vector is just the first two Euler angles as spherical coordinates with radius = 1.


Thank you both very much!