Re: [eigen] Quaternion toRotationMatrix

[ Thread Index | Date Index | More Archives ]

But how can that be done , optimize away the division by s approx 1?

In certain circumstances, the user normalizes (after integration) some where the quaternion anyway, and does not want to pay for additional division of s?

I dont know...?

On 09/30/2015 05:47 PM, Dick Lyon wrote:
What not always do the latter (the <false>), an maybe optimize away the divide if s is equal to 1 (within some precision)?

On Wed, Sep 30, 2015 at 8:38 AM, Gabriel <gnuetzi@xxxxxxxxx> wrote:

I have the following suggestions for the function toRotationMatrix()   for the QuaternionBase class:

The function is shown here:

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  ( 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, 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>


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

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+