Does the SO3 group include rotoinversions? If so, TooN::SO3 isn't handling them properly:
Matrix<3> m = Identity;
m[0][0] = -1;
SO3<> r(m);
cout << r << endl << SO3<>::exp(r.ln()) << endl;
results in:
-1 0 0
0 1 0
0 0 1
nan nan nan
nan nan nan
nan nan nan
If SO3 is not meant to handle this case then perhaps SO3::coerce() should force the matrix to have determinant 1, or output a warning/error?
Cheers,
Alex