• Advertisement
Sign in to follow this  

Invert quaternion X,Z rotation

This topic is 1522 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi everyone,
 
I have a device that returns me all four components of a quaternion (X,Y,Z,W).
The problem is that,the rotation around the X and Z axis are inverse (i rotate the device left,i get a right rotation etc)
For what i know that quaternion rapresent orientation referring to an 'arbitrary' axis so i can't just negate the rotation like i would do with euler angles as far as i know wacko.png
My code is:

Quaternion rotation = new Quaternion(X,Z,Y, -W);  //i had to swap Z and Y due to the device axis orientation so i had to negate W
model.World = Matrix.CreateFromQuaternion(rotation)*Matrix.CreateTranslation(Vector3.Zero);

Any ideas on how i can invert the rotation around X and Z?

 

Thanks in advance.

Share this post


Link to post
Share on other sites
Advertisement

Where did you get X, Y, Z and W from? Can you describe the "device axis orientation" and in general your coordinate conventions in more detail?

Share this post


Link to post
Share on other sites


The problem is that,the rotation around the X and Z axis are inverse (i rotate the device left,i get a right rotation etc)

 

I think your device is using left-handed coordinates, and your code is using right-handed coordinates (or the other way around.)

 

So, instead of:

 


Quaternion rotation = new Quaternion(X,Z,Y, -W); //i had to swap Z and Y due to the device axis orientation so i had to negate W

 

Try:

 

Quaternion rotation = new Quaternion(X, Y, -Z, W); 

Share this post


Link to post
Share on other sites

Sorry for the delay of the reply but i didn't receive the notification email.

The problem is solved,i don't know why but for some strange reason (maybe not if someone knows the math behind quaternion,which i don't)

negating both Z and Y axis gave the correct results.

Basically now eveything is working with:

Quaternion rotation = new Quaternion(X, -Z, -Y, -W);

I tried before to negate one axe but instead of inverting the orientation,it was like swapping axis again.

 

Thanks.

Share this post


Link to post
Share on other sites

You can try negating only X instead of Y, Z and W. Not that it matters much, but perhaps it's easier to think of what that does.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement