| Re: [eigen] Quaternion toRotationMatrix |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hello,
I have the following suggestions for the function toRotationMatrix() for the QuaternionBase class:
The function is shown here:
http://pastebin.com/QPRANVU6
The documentation says that this function is undefined if a non unit quaternion is used! This is absolutely correct!
The function so far implemented is equation 1.112 in http://snag.gy/J6rDH.jpg ( tilde is the skew-symetric matrix of a vector -> cross product)
If we want to use the Eigen function toRotationMatrix() we need to normalize the quaternion beforehand which is expensive!
A better way is to use equation 1.110 directly in http://snag.gy/J6rDH.jpg, which directly normalizes the quaternion but only needs the square norm of the quaternion "s"
which is much cheaper. Equation 1.110 directly gives a proper rotation matrix! (orthogonal, and det(R)=1)
I would provide the following adaption:
template<bool isQuaternionNormalized = false>
QuaternionBase<...>::toRotationMatrix()
where
toRotationMatrix<true> -> same function as already implemented (user should use this if quaternion is already normalized)
toRotationMatrix<false> -> no normalized quaternion is given as argument, use an implementation which uses equation 1.110 in http://snag.gy/J6rDH.jpg
Maybe the default behavior should be "true" so there is no change to the interface for the user who used these functions....
BR Gabriel Nützi
| Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |