PeriDyno 1.0.0
Loading...
Searching...
No Matches
CollisionDetectionAlgorithm.inl File Reference
#include "Platform.h"
#include "Primitive/Primitive3D.h"
#include "Vector/Vector3D.h"
#include "ComputeGeometry.h"
Include dependency graph for CollisionDetectionAlgorithm.inl:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  dyno::ClipVertex
 

Namespaces

namespace  dyno
 This is an implementation of AdditiveCCD based on peridyno.
 

Macros

#define REAL_infinity   1.0e30
 
#define REAL_EQUAL(a, b)
 
#define REAL_GREAT(a, b)
 
#define REAL_LESS(a, b)
 
#define InFront(a)
 
#define Behind(a)
 
#define On(a)
 

Functions

template<typename Real>
DYN_FUNC float dyno::fsign (Real v)
 
template<typename Real>
DYN_FUNC void dyno::swapContactPair (TManifold< Real > &m)
 
template<typename Real>
DYN_FUNC bool dyno::trackFaceAxis (int &axis, Real &sMax, Vector< Real, 3 > &axisNormal, int n, Real s, const Vector< Real, 3 > &normal)
 
template<typename Real>
DYN_FUNC bool dyno::trackEdgeAxis (int &axis, Real &sMax, Vector< Real, 3 > &axisNormal, int n, Real s, const Vector< Real, 3 > &normal)
 
template<typename Real>
DYN_FUNC void dyno::computeReferenceEdgesAndBasis (unsigned char *out, SquareMatrix< Real, 3 > *basis, Vector< Real, 3 > *e, const Vector< Real, 3 > &eR, const Transform< Real, 3 > &rtx, Vector< Real, 3 > n, int axis)
 
template<typename Real>
DYN_FUNC void dyno::computeIncidentFace (ClipVertex *out, const Transform< Real, 3 > &itx, const Vector< Real, 3 > &e, Vector< Real, 3 > n)
 
template<typename Real>
DYN_FUNC int dyno::orthographic (ClipVertex *out, Real sign, Real e, int axis, int clipEdge, ClipVertex *in, int inCount)
 
template<typename Real>
DYN_FUNC int dyno::clip (ClipVertex *outVerts, float *outDepths, const Vector< Real, 3 > &rPos, const Vector< Real, 3 > &e, unsigned char *clipEdges, const SquareMatrix< Real, 3 > &basis, ClipVertex *incident)
 
template<typename Real>
DYN_FUNC void dyno::edgesContact (Vector< Real, 3 > &CA, Vector< Real, 3 > &CB, const Vector< Real, 3 > &PA, const Vector< Real, 3 > &QA, const Vector< Real, 3 > &PB, const Vector< Real, 3 > &QB)
 
template<typename Real>
DYN_FUNC void dyno::checkSignedDistance (Real lowerBoundaryA, Real upperBoundaryA, Real lowerBoundaryB, Real upperBoundaryB, Real &intersectionDistance, Real &boundaryA, Real &boundaryB)
 
template<typename Real>
DYN_FUNC bool dyno::checkPointInBoundary (const Vec3f &p, const Vec3f &N, const Real &b, const Real &r)
 
template<typename Real>
DYN_FUNC void dyno::updateSDF (Real &boundaryA, Real &boundaryB, Real &depth, Vec3f &normal, Real currentBoundaryA, Real currentBoundaryB, Real currentDepth, Vec3f currentN)
 
template<typename Real, typename ShapeA, typename ShapeB>
DYN_FUNC void dyno::checkSignedDistanceAxis (Real &intersectionDistance, Real &BoundaryA, Real &BoundaryB, const Vec3f axisNormal, ShapeA &shapeA, ShapeB &shapeB, const Real radiusA, const Real radiusB)
 
template<typename Real, typename ShapeA, typename ShapeB>
DYN_FUNC void dyno::checkAxisPoint (TSeparationData< Real > &sat, ShapeA &shapeA, ShapeB &shapeB, const Real radiusA, const Real radiusB, Vec3f pA, Vec3f pB, const Real rA=0.f, const Real rB=0.f)
 
template<typename Real, typename ShapeA, typename ShapeB>
DYN_FUNC void dyno::checkAxisEdge (TSeparationData< Real > &sat, ShapeA &shapeA, ShapeB &shapeB, const Real radiusA, const Real radiusB, Segment3D edgeA, Segment3D edgeB)
 
template<typename Real, typename ShapeA, typename ShapeB>
DYN_FUNC void dyno::checkAxisTri (TSeparationData< Real > &sat, ShapeA &shapeA, ShapeB &shapeB, const Real radiusA, const Real radiusB, Triangle3D tri, SeparationType type)
 
template<typename Real, typename ShapeA, typename ShapeB>
DYN_FUNC void dyno::checkAxisRect (TSeparationData< Real > &sat, ShapeA &shapeA, ShapeB &shapeB, const Real radiusA, const Real radiusB, Rectangle3D rect, SeparationType type)
 
template<typename Real>
DYN_FUNC void dyno::projectOnAxis (Real &lowerBoundary, Real &upperBoundary, const Vec3f axisNormal, Sphere3D sphere, const Real radius)
 
template<typename Real>
DYN_FUNC void dyno::setupContactOnSphere (TManifold< Real > &m, TSeparationData< Real > &sat, const TSphere3D< Real > &sphereB, const Real radiusA, const Real radiusB)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithTri (Vector< Real, 3 > *q, const TTriangle3D< Real > &triA, const TSphere3D< Real > &sphereB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithRect (Vector< Real, 3 > *q, const TRectangle3D< Real > &rectA, const TSphere3D< Real > &sphereB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC void dyno::projectOnAxis (Real &lowerBoundary, Real &upperBoundary, const Vec3f axisNormal, Segment3D seg, const Real radius)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithTri (Vector< Real, 3 > *q, const TTriangle3D< Real > &triA, const TSegment3D< Real > &segB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithRect (Vector< Real, 3 > *q, const TRectangle3D< Real > &rectA, const TSegment3D< Real > &segB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC void dyno::setupContactOnSeg (TManifold< Real > &m, TSeparationData< Real > &sat, const TSegment3D< Real > &segB, const Real radiusA, const Real radiusB)
 
template<typename Real>
DYN_FUNC void dyno::projectOnAxis (Real &lowerBoundary, Real &upperBoundary, const Vec3f axisNormal, Triangle3D tri, const Real radius)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithTri (Vector< Real, 3 > *q, const TTriangle3D< Real > &triA, const TTriangle3D< Real > &triB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithRect (Vector< Real, 3 > *q, const TRectangle3D< Real > &rectA, const TTriangle3D< Real > &triB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real, typename Shape>
DYN_FUNC void dyno::setupContactOnTri (TManifold< Real > &m, TSeparationData< Real > &sat, const Shape &shapeA, const TTriangle3D< Real > &triB, const Real radiusA, const Real radiusB)
 
template<typename Real>
DYN_FUNC void dyno::projectOnAxis (Real &lowerBoundary, Real &upperBoundary, const Vec3f axisNormal, Tet3D tet, const Real radius)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithTri (Vector< Real, 3 > *q, const TTriangle3D< Real > &triA, const TTet3D< Real > &tetB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithRect (Vector< Real, 3 > *q, const TRectangle3D< Real > &rectA, const TTet3D< Real > &tetB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real, typename Shape>
DYN_FUNC void dyno::setupContactOnTet (TManifold< Real > &m, TSeparationData< Real > &sat, const Shape &shapeA, const TTet3D< Real > &tetB, const Real radiusA, const Real radiusB)
 
template<typename Real>
DYN_FUNC void dyno::projectOnAxis (Real &lowerBoundary, Real &upperBoundary, const Vec3f axisNormal, OrientedBox3D box, const Real radius)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithTri (Vector< Real, 3 > *q, const TTriangle3D< Real > &triA, const TOrientedBox3D< Real > &boxB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real>
DYN_FUNC int dyno::ClippingWithRect (Vector< Real, 3 > *q, const TRectangle3D< Real > &rectA, const TOrientedBox3D< Real > &boxB, const Vector< Real, 3 > &transA, const Vector< Real, 3 > &transB)
 
template<typename Real, typename Shape>
DYN_FUNC void dyno::setupContactOnBox (TManifold< Real > &m, TSeparationData< Real > &sat, const Shape &shapeA, const TOrientedBox3D< Real > &boxB, const Real radiusA, const Real radiusB)
 
template<typename Real>
DYN_FUNC void dyno::computeSupportEdge (Vector< Real, 3 > &aOut, Vector< Real, 3 > &bOut, const SquareMatrix< Real, 3 > &rot, const Vector< Real, 3 > &trans, const Vector< Real, 3 > &e, Vector< Real, 3 > n)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlapAxis (Real &lowerBoundary1, Real &upperBoundary1, Real &lowerBoundary2, Real &upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2, const Vector< Real, 3 > axisNormal, OrientedBox3D box, Capsule3D cap)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlapTetTri (Real lowerBoundary1, Real upperBoundary1, Real lowerBoundary2, Real upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlapAxis (Real &lowerBoundary1, Real &upperBoundary1, Real &lowerBoundary2, Real &upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet, Capsule3D cap)
 
template<typename Real>
DYN_FUNC void dyno::setupContactCaps (Real boundary1, Real boundary2, const Vector< Real, 3 > axisNormal, TCapsule3D< Real > cap, TOrientedBox3D< Real > box, Real depth, TManifold< Real > &m)
 
template<typename Real>
DYN_FUNC void dyno::setupContactTets (Real boundary1, Real boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet, Capsule3D cap, Real sMax, TManifold< Real > &m)
 
template<typename Real>
DYN_FUNC void dyno::setupContactTetTri (Real boundary1, Real boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet, Triangle3D triangle, Real sMax, TManifold< Real > &m)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlap (Real lowerBoundary1, Real upperBoundary1, Real lowerBoundary2, Real upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlapAxis (Real &lowerBoundary1, Real &upperBoundary1, Real &lowerBoundary2, Real &upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet1, Tet3D tet2)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlapAxis (Real &lowerBoundary1, Real &upperBoundary1, Real &lowerBoundary2, Real &upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet, Triangle3D tri)
 
template<typename Real>
DYN_FUNC bool dyno::checkOverlapAxis (Real &lowerBoundary1, Real &upperBoundary1, Real &lowerBoundary2, Real &upperBoundary2, Real &intersectionDistance, Real &boundary1, Real &boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet, OrientedBox3D box)
 
template<typename Real>
DYN_FUNC void dyno::setupContactTets (Real boundary1, Real boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet1, Tet3D tet2, Real sMax, TManifold< Real > &m)
 
template<typename Real>
DYN_FUNC void dyno::setupContactTets (Real boundary1, Real boundary2, const Vector< Real, 3 > axisNormal, Tet3D tet, TOrientedBox3D< Real > box, Real sMax, TManifold< Real > &m)
 

Macro Definition Documentation

◆ Behind

#define Behind ( a)
Value:
((a) >= float( 0.0 ))

Definition at line 264 of file CollisionDetectionAlgorithm.inl.

◆ InFront

#define InFront ( a)
Value:
((a) < float( 0.0 ))

Definition at line 261 of file CollisionDetectionAlgorithm.inl.

◆ On

#define On ( a)
Value:
((a) < float( 0.005 ) && (a) > -float( 0.005 ))

Definition at line 267 of file CollisionDetectionAlgorithm.inl.

◆ REAL_EQUAL

#define REAL_EQUAL ( a,
b )
Value:
(((a < b + EPSILON) && (a > b - EPSILON)) ? true : false)

Definition at line 10 of file CollisionDetectionAlgorithm.inl.

◆ REAL_GREAT

#define REAL_GREAT ( a,
b )
Value:
((a > EPSILON + b)? true: false)

Definition at line 11 of file CollisionDetectionAlgorithm.inl.

◆ REAL_infinity

#define REAL_infinity   1.0e30

Definition at line 9 of file CollisionDetectionAlgorithm.inl.

◆ REAL_LESS

#define REAL_LESS ( a,
b )
Value:
((a + EPSILON < b)? true: false)

Definition at line 12 of file CollisionDetectionAlgorithm.inl.