33#define CATCH_DEGENERATE_TETRAHEDRON 1
34void btVoronoiSimplexSolver::removeVertex(
int index)
59void btVoronoiSimplexSolver::reset()
81bool btVoronoiSimplexSolver::updateClosestVectorAndPoints()
140 m_cachedBC.setBarycentricCoordinates(1 - t, t);
141 nearest = from + t *
v;
247 for (
i = 0;
i < numverts;
i++)
276 for (
i = 0;
i < numverts;
i++)
278#ifdef BT_USE_EQUAL_VERTEX_THRESHOLD
301bool btVoronoiSimplexSolver::emptySimplex()
const
315 result.m_usedVertices.reset();
325 result.m_closestPointOnSimplex = a;
326 result.m_usedVertices.usedVertexA =
true;
327 result.setBarycentricCoordinates(1, 0, 0);
335 if (d3 >=
btScalar(0.0) && d4 <= d3)
337 result.m_closestPointOnSimplex =
b;
338 result.m_usedVertices.usedVertexB =
true;
339 result.setBarycentricCoordinates(0, 1, 0);
348 result.m_closestPointOnSimplex = a +
v * ab;
349 result.m_usedVertices.usedVertexA =
true;
350 result.m_usedVertices.usedVertexB =
true;
351 result.setBarycentricCoordinates(1 -
v,
v, 0);
360 if (d6 >=
btScalar(0.0) && d5 <= d6)
362 result.m_closestPointOnSimplex = c;
363 result.m_usedVertices.usedVertexC =
true;
364 result.setBarycentricCoordinates(0, 0, 1);
373 result.m_closestPointOnSimplex = a +
w * ac;
374 result.m_usedVertices.usedVertexA =
true;
375 result.m_usedVertices.usedVertexC =
true;
376 result.setBarycentricCoordinates(1 -
w, 0,
w);
385 btScalar w = (d4 - d3) / ((d4 - d3) + (d5 - d6));
387 result.m_closestPointOnSimplex =
b +
w * (c -
b);
388 result.m_usedVertices.usedVertexB =
true;
389 result.m_usedVertices.usedVertexC =
true;
390 result.setBarycentricCoordinates(0, 1 -
w,
w);
400 result.m_closestPointOnSimplex = a + ab *
v + ac *
w;
401 result.m_usedVertices.usedVertexA =
true;
402 result.m_usedVertices.usedVertexB =
true;
403 result.m_usedVertices.usedVertexC =
true;
404 result.setBarycentricCoordinates(1 -
v -
w,
v,
w);
418#ifdef CATCH_DEGENERATE_TETRAHEDRON
419#ifdef BT_USE_DOUBLE_PRECISION
434 return signp * signd <
btScalar(0.);
454 if (pointOutsideABC < 0 || pointOutsideACD < 0 || pointOutsideADB < 0 || pointOutsideBDC < 0)
460 if (!pointOutsideABC && !pointOutsideACD && !pointOutsideADB && !pointOutsideBDC)
474 if (sqDist < bestSqDist)
499 if (sqDist < bestSqDist)
524 if (sqDist < bestSqDist)
548 if (sqDist < bestSqDist)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
SIMD_FORCE_INLINE btScalar distance2(const btVector3 &v) const
Return the distance squared between the ends of this and another vector This is symantically treating...
void reduceVertices(const btUsageBitfield &usedVerts)
bool closestPtPointTetrahedron(const btVector3 &p, const btVector3 &a, const btVector3 &b, const btVector3 &c, const btVector3 &d, btSubSimplexClosestResult &finalResult)
bool m_cachedValidClosest
int pointOutsideOfPlane(const btVector3 &p, const btVector3 &a, const btVector3 &b, const btVector3 &c, const btVector3 &d)
Test if point p and d lie on opposite sides of plane through abc.
btVector3 m_simplexVectorW[VORONOI_SIMPLEX_MAX_VERTS]
btSubSimplexClosestResult m_cachedBC
bool updateClosestVectorAndPoints()
bool closestPtPointTriangle(const btVector3 &p, const btVector3 &a, const btVector3 &b, const btVector3 &c, btSubSimplexClosestResult &result)
btVector3 m_simplexPointsP[VORONOI_SIMPLEX_MAX_VERTS]
btVector3 m_simplexPointsQ[VORONOI_SIMPLEX_MAX_VERTS]
void removeVertex(int index)
btScalar m_equalVertexThreshold
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt)
VecBase< float, 3 > cross(VecOp< float, 3 >, VecOp< float, 3 >) RET
void setBarycentricCoordinates(btScalar a=btScalar(0.), btScalar b=btScalar(0.), btScalar c=btScalar(0.), btScalar d=btScalar(0.))
btUsageBitfield m_usedVertices
btScalar m_barycentricCoords[4]
btVector3 m_closestPointOnSimplex
unsigned short usedVertexC
unsigned short usedVertexB
unsigned short usedVertexA
unsigned short usedVertexD