16 #ifndef BT_TRANSFORM_UTIL_H 17 #define BT_TRANSFORM_UTIL_H 20 #define ANGULAR_MOTION_THRESHOLD btScalar(0.5)*SIMD_HALF_PI 28 supportDir.
y() <
btScalar(0.0) ? -halfExtents.
y() : halfExtents.
y(),
29 supportDir.
z() <
btScalar(0.0) ? -halfExtents.
z() : halfExtents.
z());
47 #ifdef QUATERNION_DERIVATIVE 49 predictedOrn += (angvel * predictedOrn) * (timeStep *
btScalar(0.5));
72 axis = angvel*(
btScalar(0.5)*timeStep-(timeStep*timeStep*timeStep)*(
btScalar(0.020833333333))*fAngle*fAngle );
77 axis = angvel*(
btSin(
btScalar(0.5)*fAngle*timeStep)/fAngle );
97 linVel = (pos1 - pos0) / timeStep;
103 angVel = axis * angle / timeStep;
131 angVel = axis * angle / timeStep;
175 :m_boundingRadiusA(boundingRadiusA),
176 m_boundingRadiusB(boundingRadiusB),
177 m_separatingDistance(0.f)
183 return m_separatingDistance;
193 if (m_separatingDistance>0.f)
197 btVector3 linVelA,angVelA,linVelB,angVelB;
200 btScalar maxAngularProjectedVelocity = angVelA.
length() * m_boundingRadiusA + angVelB.
length() * m_boundingRadiusB;
202 btScalar relLinVelocLength = relLinVel.
dot(m_separatingNormal);
203 if (relLinVelocLength<0.f)
205 relLinVelocLength = 0.f;
208 btScalar projectedMotion = maxAngularProjectedVelocity +relLinVelocLength;
209 m_separatingDistance -= projectedMotion;
220 m_separatingDistance = separatingDistance;
222 if (m_separatingDistance>0.f)
224 m_separatingNormal = separatingVector;
240 #endif //BT_TRANSFORM_UTIL_H btMatrix3x3 inverse() const
Return the inverse of the matrix.
btVector3 m_separatingNormal
btScalar getAngle() const
Return the angle [0, 2Pi] of rotation represented by this quaternion.
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
btScalar btSin(btScalar x)
const btScalar & z() const
Return the z value.
btQuaternion & safeNormalize()
btConvexSeparatingDistanceUtil(btScalar boundingRadiusA, btScalar boundingRadiusB)
btScalar btSqrt(btScalar y)
#define SIMD_FORCE_INLINE
const btScalar & y() const
Return the y value.
btScalar m_boundingRadiusB
btScalar dot(const btVector3 &v) const
Return the dot product.
btQuaternion nearest(const btQuaternion &qd) const
const btScalar & x() const
Return the x value.
void getRotation(btQuaternion &q) const
Get the matrix represented as a quaternion.
void updateSeparatingDistance(const btTransform &transA, const btTransform &transB)
btQuaternion & normalize()
Normalize the quaternion Such that x^2 + y^2 + z^2 +w^2 = 1.
btScalar m_boundingRadiusA
The btConvexSeparatingDistanceUtil can help speed up convex collision detection by conservatively upd...
btScalar getConservativeSeparatingDistance()
btScalar m_separatingDistance
btQuaternion inverse() const
Return the inverse of this quaternion.
btScalar length() const
Return the length of the vector.
btScalar length2() const
Return the length squared of the quaternion.
const btScalar & y() const
Return the y value.
btVector3 can be used to represent 3D points and vectors.
btScalar length2() const
Return the length of the vector squared.
const btScalar & x() const
Return the x value.
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
void initSeparatingDistance(const btVector3 &separatingVector, btScalar separatingDistance, const btTransform &transA, const btTransform &transB)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btScalar btCos(btScalar x)
const btScalar & z() const
Return the z value.