How to convert from btQuaternion to euler angles?[Solved]

Post Reply
Freedome256
Posts: 3
Joined: Tue Jul 12, 2016 5:42 pm

How to convert from btQuaternion to euler angles?[Solved]

Post by Freedome256 »

I'm looking for something like this:

Code: Select all

btVector3 getEuler(btQuaternion q)
{
 //get those euler angles(x,y,z) and put them in a vector

return vector;
}
Unless there is some built in function to do this of course.
Last edited by Freedome256 on Wed Jul 13, 2016 12:58 am, edited 1 time in total.
User avatar
drleviathan
Posts: 849
Joined: Tue Sep 30, 2014 6:03 pm
Location: San Francisco

Re: How to convert from btQuaternion to euler angles?

Post by drleviathan »

What are you actually trying to do? There is probably a better way to do it just working with quaternions.
Freedome256
Posts: 3
Joined: Tue Jul 12, 2016 5:42 pm

Re: How to convert from btQuaternion to euler angles?

Post by Freedome256 »

My rendering engine works in Euler angles for rendering 3d boxes. I am creating dynamic objects that take the physics data and turn it into data for rendering boxes. So I guess if i could extract 4 points from a rigid body that would be good as well.
Freedome256
Posts: 3
Joined: Tue Jul 12, 2016 5:42 pm

Solved

Post by Freedome256 »

Got it to work!
code from :http://www.euclideanspace.com/maths/geo ... /index.htm

Code: Select all


btVector3 quatToEuler(btQuaternion quat)
{
  float  heading,attitude,bank;
  Quaternion q1;
  q1.x =quat.getX();
  q1.y = quat.getY();
  q1.z = quat.getZ();
  q1.w = quat.getW();
  double test = q1.x*q1.y + q1.z*q1.w;
	if (test > 0.499) { // singularity at north pole
		heading = 2 * atan2(q1.x,q1.w);
		attitude = PI/2;
		bank = 0;
		return btVector3(0,0,0);
	}
	if (test < -0.499) { // singularity at south pole
		heading = -2 * atan2(q1.x,q1.w);
		attitude = - PI/2;
		bank = 0;
		return  btVector3(0,0,0);
	}
    double sqx = q1.x*q1.x;
    double sqy = q1.y*q1.y;
    double sqz = q1.z*q1.z;
    heading = atan2(2*q1.y*q1.w-2*q1.x*q1.z , 1 - 2*sqy - 2*sqz);
 attitude = asin(2*test);
 bank = atan2(2*q1.x*q1.w-2*q1.y*q1.z , 1 - 2*sqx - 2*sqz);
  btVector3 vec(bank,heading,attitude);
  return vec;
}
Post Reply