fixed issue with de-normalized quaternion, causing acosf to fail
See http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=1440 Thanks Proctoid for reporting.
This commit is contained in:
@@ -116,7 +116,10 @@ SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabsf(x); }
|
|||||||
SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cosf(x); }
|
SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cosf(x); }
|
||||||
SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sinf(x); }
|
SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sinf(x); }
|
||||||
SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tanf(x); }
|
SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tanf(x); }
|
||||||
SIMD_FORCE_INLINE btScalar btAcos(btScalar x) { return acosf(x); }
|
SIMD_FORCE_INLINE btScalar btAcos(btScalar x) {
|
||||||
|
btAssert(x <= btScalar(1.));
|
||||||
|
return acosf(x);
|
||||||
|
}
|
||||||
SIMD_FORCE_INLINE btScalar btAsin(btScalar x) { return asinf(x); }
|
SIMD_FORCE_INLINE btScalar btAsin(btScalar x) { return asinf(x); }
|
||||||
SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atanf(x); }
|
SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atanf(x); }
|
||||||
SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2f(x, y); }
|
SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2f(x, y); }
|
||||||
|
|||||||
@@ -121,6 +121,10 @@ public:
|
|||||||
dmat.getRotation(dorn);
|
dmat.getRotation(dorn);
|
||||||
#endif//USE_QUATERNION_DIFF
|
#endif//USE_QUATERNION_DIFF
|
||||||
|
|
||||||
|
///floating point inaccuracy can lead to w component > 1..., which breaks
|
||||||
|
|
||||||
|
dorn.normalize();
|
||||||
|
|
||||||
angle = dorn.getAngle();
|
angle = dorn.getAngle();
|
||||||
axis = btVector3(dorn.x(),dorn.y(),dorn.z());
|
axis = btVector3(dorn.x(),dorn.y(),dorn.z());
|
||||||
axis[3] = btScalar(0.);
|
axis[3] = btScalar(0.);
|
||||||
|
|||||||
Reference in New Issue
Block a user