don't attempt to normalize the rotation vector
indeed, by construction of the rotation matrix, it is guaranteed to have a length of 1. moreover, the normalization code was missing a square-root, fortunatelly, since the length is 1, this didn't cause any damage (since sqrt(1) = 1). Change-Id: I9facd668caaf5bb3bfccb139ab872f2bb2066365
This commit is contained in:
parent
f001c92436
commit
5c6d7ff3e6
@ -114,10 +114,12 @@ bool RotationVectorSensor::process(sensors_event_t* outEvent,
|
||||
float qx = sqrtf( clamp( Hx - My - Az + 1) * 0.25f );
|
||||
float qy = sqrtf( clamp(-Hx + My - Az + 1) * 0.25f );
|
||||
float qz = sqrtf( clamp(-Hx - My + Az + 1) * 0.25f );
|
||||
const float n = 1.0f / (qw*qw + qx*qx + qy*qy + qz*qz);
|
||||
qx = copysignf(qx, Ay - Mz) * n;
|
||||
qy = copysignf(qy, Hz - Ax) * n;
|
||||
qz = copysignf(qz, Mx - Hy) * n;
|
||||
qx = copysignf(qx, Ay - Mz);
|
||||
qy = copysignf(qy, Hz - Ax);
|
||||
qz = copysignf(qz, Mx - Hy);
|
||||
|
||||
// this quaternion is guaranteed to be normalized, by construction
|
||||
// of the rotation matrix.
|
||||
|
||||
*outEvent = event;
|
||||
outEvent->data[0] = qx;
|
||||
|
Loading…
Reference in New Issue
Block a user