Hacker News new | ask | show | jobs
by rsp1984 475 days ago
If you take the Matrix logarithm of an SO(3) (3x3 rotation matrix) you get a 3-vector that represents the axis of rotation, scaled by the rotation amount (in radians). This is also a cheap operation using the inverse Rodrigues formula [1].

The 3-vector is not a bijective representation (starts repeating after length == 2*pi) but otherwise is the most elegant of them all, IMO. No need for rotors or quaternions. Plus you can simply use Rodrigues to get a rotation matrix back.

[1] https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula

3 comments

Thanks for the link to the Rodrigues form, that's quite interesting. Slightly confused by your comment though, shouldn't the matrix logarithm produce another matrix?
You're correct. The logarithm produces what's essentially a cross product matrix, 0 on the diagonal and symmetric off-diagonal. The off-diag elements are the 3-vector I was talking about. Thanks for pointing that out.
SO(3) is nonabelian, and isn't simply connected, which is why the surjective homomorphsin to SU(2) is valuable, particularly in 3D graphics.
Composing axis-angle representations gets real weird real fast. You can convert them into 9 element rotation matrices, but then you lose the benefits of storing them using only 3 elements in the first place.