From 10aed12f4272be425114eae2ad4c84cebe4b09ee Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Thu, 7 Sep 2006 23:28:30 +0000 Subject: [PATCH] more assert issues fixed in Epa --- Extras/EPA/Epa.cpp | 11 ++++++++++- Extras/EPA/EpaPenetrationDepthSolver.cpp | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Extras/EPA/Epa.cpp b/Extras/EPA/Epa.cpp index 5f50b672b..d535e40d7 100644 --- a/Extras/EPA/Epa.cpp +++ b/Extras/EPA/Epa.cpp @@ -83,20 +83,29 @@ bool Epa::Initialize( SimplexSolverInterface& simplexSolver ) delta = v.dot( w ); EPA_DEBUG_ASSERT( ( delta <= 0 ) ,"Shapes are disjoint, EPA should have never been called!" ); + if ( delta > 0.f ) + return false; + EPA_DEBUG_ASSERT( !simplexSolver.inSimplex( w ) ,"Shapes are disjoint, EPA should have never been called!" ); + if (simplexSolver.inSimplex( w )) + return false; // Add support point to simplex simplexSolver.addVertex( w, pWorld, qWorld ); bool closestOk = simplexSolver.closest( v ); EPA_DEBUG_ASSERT( closestOk ,"Shapes are disjoint, EPA should have never been called!" ); - + if (!closestOk) + return false; + SimdScalar prevVSqrd = squaredDistance; squaredDistance = v.length2(); // Is v converging to v(A-B) ? EPA_DEBUG_ASSERT( ( ( prevVSqrd - squaredDistance ) > SIMD_EPSILON * prevVSqrd ) , "Shapes are disjoint, EPA should have never been called!" ); + if (( ( prevVSqrd - squaredDistance ) <= SIMD_EPSILON * prevVSqrd )) + return false; if ( simplexSolver.fullSimplex() || ( squaredDistance <= SIMD_EPSILON * simplexSolver.maxVertex() ) ) { diff --git a/Extras/EPA/EpaPenetrationDepthSolver.cpp b/Extras/EPA/EpaPenetrationDepthSolver.cpp index 1837fd5d6..22c0b1109 100644 --- a/Extras/EPA/EpaPenetrationDepthSolver.cpp +++ b/Extras/EPA/EpaPenetrationDepthSolver.cpp @@ -45,8 +45,8 @@ bool EpaPenetrationDepthSolver::CalcPenDepth( SimplexSolverInterface& simplexSol SimdVector3& v, SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB, class IDebugDraw* debugDraw ) { - assert( pConvexA && "Convex shape A is invalid!" ); - assert( pConvexB && "Convex shape B is invalid!" ); + EPA_DEBUG_ASSERT( pConvexA ,"Convex shape A is invalid!" ); + EPA_DEBUG_ASSERT( pConvexB ,"Convex shape B is invalid!" ); SimdScalar penDepth; @@ -60,7 +60,7 @@ bool EpaPenetrationDepthSolver::CalcPenDepth( SimplexSolverInterface& simplexSol penDepth = EpaPenDepth( simplexSolver, pConvexA, pConvexB, transformA, transformB, wWitnessOnA, wWitnessOnB ); - assert( ( penDepth > 0 ) && "EPA or Hybrid Technique failed to calculate penetration depth!" ); + EPA_DEBUG_ASSERT( ( penDepth > 0 ) ,"EPA or Hybrid Technique failed to calculate penetration depth!" ); #ifdef EPA_USE_HYBRID } @@ -193,7 +193,7 @@ SimdScalar EpaPenetrationDepthSolver::EpaPenDepth( SimplexSolverInterface& simpl if ( !epa.Initialize( simplexSolver ) ) { - assert( false && "Epa failed to initialize!" ); + EPA_DEBUG_ASSERT( false ,"Epa failed to initialize!" ); return 0; }