[ODE] properly QuaternionToEuler
Eugen Lofing
lofing at gmx.net
Tue Oct 18 16:05:57 MST 2005
Hello alltogether!
I actually use for QuaternionToEuler-converting following algorithm
---------------------------------------------------------------------
dReal w, x, y, z;
w = quaternion[0];
x = quaternion[1];
y = quaternion[2];
z = quaternion[3];
double sqw = w * w;
double sqx = x * x;
double sqy = y * y;
double sqz = z * z;
// heading
float Z = (float) (atan2(2.0 * (x*y + z*w),(sqx - sqy - sqz + sqw)) *
GRAD_PI);
// bank
float X = (float) (atan2(2.0 * (y*z + x*w),(-sqx - sqy + sqz + sqw)) *
GRAD_PI);
// attitude
float Y = (float) (asin(-2.0 * (x*z - y*w)) * GRAD_PI);
---------------------------------------------------------------------
but it is buggy, because I have following ranges for Y (attitude):
0..90..0..-90..0
^ |
|______________|
instead of 0..360, or -180..180 like by X and Z :(
I assume there are 3 cases to differ by checking value of (x*z - y*w)
But I don't know how, nor have some formula..
Do somebody know?
Thank u for all hints and suggestions :)
--
Highspeed-Freiheit. Bei GMX supergünstig, z.B. GMX DSL_Cityflat,
DSL-Flatrate für nur 4,99 Euro/Monat* http://www.gmx.net/de/go/dsl
More information about the ODE
mailing list