boxBoxDistance.cpp File Reference

#include "Box.h"
Include dependency graph for boxBoxDistance.cpp:

Go to the source code of this file.

Defines

#define AaxisTest(dim, letter, first)
#define BaxisTest(dim, letter)
#define CrossAxisTest(dima, dimb, letterb)
#define VertexBFaceA_SetNewMin()
#define VertexAFaceB_SetNewMin()
#define EdgeEdgeTest(ac, ac_letter, ad, ad_letter, bc, bc_letter, bd, bd_letter)
#define EdgeEdge_SetNewMin(ac_letter, ad_letter, bc_letter, bd_letter)

Enumerations

enum  BoxSepAxisType {
  A_AXIS,
  B_AXIS,
  CROSS_AXIS
}

Functions

static float sqr (float a)
float VertexBFaceATest (bool &inVoronoi, float &t0, float &t1, const Vector3 &hA, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsB, Vector3 &scalesB)
void VertexBFaceATests (bool &done, float &minDistSqr, Point3 &localPointA, Point3 &localPointB, FeatureType &featureA, FeatureType &featureB, const Vector3 &hA, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsB, Vector3 &scalesB, bool first)
float VertexAFaceBTest (bool &inVoronoi, float &t0, float &t1, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &scalesA)
void VertexAFaceBTests (bool &done, float &minDistSqr, Point3 &localPointA, Point3 &localPointB, FeatureType &featureA, FeatureType &featureB, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &scalesA, bool first)
float EdgeEdgeTest_0101 (bool &inVoronoi, float &tA, float &tB, const Vector3 &hA, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &signsB, Vector3 &scalesA, Vector3 &scalesB)
float EdgeEdgeTest_0110 (bool &inVoronoi, float &tA, float &tB, const Vector3 &hA, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &signsB, Vector3 &scalesA, Vector3 &scalesB)
float EdgeEdgeTest_1001 (bool &inVoronoi, float &tA, float &tB, const Vector3 &hA, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &signsB, Vector3 &scalesA, Vector3 &scalesB)
float EdgeEdgeTest_1010 (bool &inVoronoi, float &tA, float &tB, const Vector3 &hA, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &signsB, Vector3 &scalesA, Vector3 &scalesB)
void EdgeEdgeTests (bool &done, float &minDistSqr, Point3 &localPointA, Point3 &localPointB, int &otherFaceDimA, int &otherFaceDimB, FeatureType &featureA, FeatureType &featureB, const Vector3 &hA, const Vector3 &hB, Vector3 &faceOffsetAB, Vector3 &faceOffsetBA, const Matrix3 &matrixAB, const Matrix3 &matrixBA, Vector3 &signsA, Vector3 &signsB, Vector3 &scalesA, Vector3 &scalesB, bool first)
float boxBoxDistance (Vector3 &normal, BoxPoint &boxPointA, BoxPoint &boxPointB, Box &boxA, const Transform3 &transformA, Box &boxB, const Transform3 &transformB, float distanceThreshold)

Variables

static const float voronoiTol = -1.0e-5f

Define Documentation

#define AaxisTest ( dim,
letter,
first   ) 
Value:
{                                                                                               \
   if ( first )                                                                                 \
   {                                                                                            \
      maxGap = gap = gapsA.get##letter();                                                      \
      if ( gap > distanceThreshold ) return gap;                                                \
      axisType = A_AXIS;                                                                        \
      faceDimA = dim;                                                                           \
      axisA = identity.getCol##dim();                                                          \
   }                                                                                            \
   else                                                                                         \
   {                                                                                            \
      gap = gapsA.get##letter();                                                               \
      if ( gap > distanceThreshold ) return gap;                                                \
      else if ( gap > maxGap )                                                                  \
      {                                                                                         \
         maxGap = gap;                                                                          \
         axisType = A_AXIS;                                                                     \
         faceDimA = dim;                                                                        \
         axisA = identity.getCol##dim();                                                       \
      }                                                                                         \
   }                                                                                            \
}

Definition at line 41 of file boxBoxDistance.cpp.

#define BaxisTest ( dim,
letter   ) 
Value:
{                                                                                               \
   gap = gapsB.get##letter();                                                                  \
   if ( gap > distanceThreshold ) return gap;                                                   \
   else if ( gap > maxGap )                                                                     \
   {                                                                                            \
      maxGap = gap;                                                                             \
      axisType = B_AXIS;                                                                        \
      faceDimB = dim;                                                                           \
      axisB = identity.getCol##dim();                                                          \
   }                                                                                            \
}

Definition at line 66 of file boxBoxDistance.cpp.

#define CrossAxisTest ( dima,
dimb,
letterb   ) 
Value:
{                                                                                               \
   const float lsqr_tolerance = 1.0e-30f;                                                       \
   float lsqr;                                                                                  \
                                                                                                \
   lsqr = lsqrs.getCol##dima().get##letterb();                                                \
                                                                                                \
   if ( lsqr > lsqr_tolerance )                                                                 \
   {                                                                                            \
      float l_recip = 1.0f / sqrtf( lsqr );                                                     \
      gap = float(gapsAxB.getCol##dima().get##letterb()) * l_recip;                           \
                                                                                                \
      if ( gap > distanceThreshold )                                                            \
      {                                                                                         \
         return gap;                                                                            \
      }                                                                                         \
                                                                                                \
      if ( gap > maxGap )                                                                       \
      {                                                                                         \
         maxGap = gap;                                                                          \
         axisType = CROSS_AXIS;                                                                 \
         edgeDimA = dima;                                                                       \
         edgeDimB = dimb;                                                                       \
         axisA = cross(identity.getCol##dima(),matrixAB.getCol##dimb()) * l_recip;            \
      }                                                                                         \
   }                                                                                            \
}

Definition at line 79 of file boxBoxDistance.cpp.

#define EdgeEdge_SetNewMin ( ac_letter,
ad_letter,
bc_letter,
bd_letter   ) 
Value:
{                                                                          \
   minDistSqr = distSqr;                                                   \
   localPointA.set##ac_letter(scalesA.get##ac_letter());                 \
   localPointA.set##ad_letter(tA);                                        \
   localPointB.set##bc_letter(scalesB.get##bc_letter());                 \
   localPointB.set##bd_letter(tB);                                        \
   otherFaceDimA = testOtherFaceDimA;                                      \
   otherFaceDimB = testOtherFaceDimB;                                      \
   featureA = E;                                                           \
   featureB = E;                                                           \
}

Definition at line 514 of file boxBoxDistance.cpp.

#define EdgeEdgeTest ( ac,
ac_letter,
ad,
ad_letter,
bc,
bc_letter,
bd,
bd_letter   ) 

Definition at line 377 of file boxBoxDistance.cpp.

 
#define VertexAFaceB_SetNewMin (  ) 
Value:
{                                               \
   minDistSqr = distSqr;                        \
   localPointB.setX(t0);                        \
   localPointB.setY(t1);                        \
   localPointA.setX( scalesA.getX() );          \
   localPointA.setY( scalesA.getY() );          \
   featureA = V;                                \
   featureB = F;                                \
}

Definition at line 283 of file boxBoxDistance.cpp.

 
#define VertexBFaceA_SetNewMin (  ) 
Value:
{                                               \
   minDistSqr = distSqr;                        \
   localPointA.setX(t0);                        \
   localPointA.setY(t1);                        \
   localPointB.setX( scalesB.getX() );          \
   localPointB.setY( scalesB.getY() );          \
   featureA = F;                                \
   featureB = V;                                \
}

Definition at line 157 of file boxBoxDistance.cpp.


Enumeration Type Documentation

Enumerator:
A_AXIS 
B_AXIS 
CROSS_AXIS 

Definition at line 25 of file boxBoxDistance.cpp.


Function Documentation

float boxBoxDistance ( Vector3 normal,
BoxPoint boxPointA,
BoxPoint boxPointB,
Box boxA,
const Transform3 transformA,
Box boxB,
const Transform3 transformB,
float  distanceThreshold 
)

Definition at line 772 of file boxBoxDistance.cpp.

float EdgeEdgeTest_0101 ( bool &  inVoronoi,
float &  tA,
float &  tB,
const Vector3 hA,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 signsB,
Vector3 scalesA,
Vector3 scalesB 
)

Definition at line 439 of file boxBoxDistance.cpp.

float EdgeEdgeTest_0110 ( bool &  inVoronoi,
float &  tA,
float &  tB,
const Vector3 hA,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 signsB,
Vector3 scalesA,
Vector3 scalesB 
)

Definition at line 458 of file boxBoxDistance.cpp.

float EdgeEdgeTest_1001 ( bool &  inVoronoi,
float &  tA,
float &  tB,
const Vector3 hA,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 signsB,
Vector3 scalesA,
Vector3 scalesB 
)

Definition at line 477 of file boxBoxDistance.cpp.

float EdgeEdgeTest_1010 ( bool &  inVoronoi,
float &  tA,
float &  tB,
const Vector3 hA,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 signsB,
Vector3 scalesA,
Vector3 scalesB 
)

Definition at line 496 of file boxBoxDistance.cpp.

void EdgeEdgeTests ( bool &  done,
float &  minDistSqr,
Point3 localPointA,
Point3 localPointB,
int &  otherFaceDimA,
int &  otherFaceDimB,
FeatureType featureA,
FeatureType featureB,
const Vector3 hA,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 signsB,
Vector3 scalesA,
Vector3 scalesB,
bool  first 
)

Definition at line 528 of file boxBoxDistance.cpp.

static float sqr ( float  a  )  [inline, static]

Definition at line 20 of file boxBoxDistance.cpp.

float VertexAFaceBTest ( bool &  inVoronoi,
float &  t0,
float &  t1,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 scalesA 
) [inline]

Definition at line 246 of file boxBoxDistance.cpp.

void VertexAFaceBTests ( bool &  done,
float &  minDistSqr,
Point3 localPointA,
Point3 localPointB,
FeatureType featureA,
FeatureType featureB,
const Vector3 hB,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsA,
Vector3 scalesA,
bool  first 
)

Definition at line 295 of file boxBoxDistance.cpp.

float VertexBFaceATest ( bool &  inVoronoi,
float &  t0,
float &  t1,
const Vector3 hA,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsB,
Vector3 scalesB 
) [inline]

Definition at line 113 of file boxBoxDistance.cpp.

void VertexBFaceATests ( bool &  done,
float &  minDistSqr,
Point3 localPointA,
Point3 localPointB,
FeatureType featureA,
FeatureType featureB,
const Vector3 hA,
Vector3 faceOffsetAB,
Vector3 faceOffsetBA,
const Matrix3 matrixAB,
const Matrix3 matrixBA,
Vector3 signsB,
Vector3 scalesB,
bool  first 
)

Definition at line 169 of file boxBoxDistance.cpp.


Variable Documentation

const float voronoiTol = -1.0e-5f [static]

Definition at line 34 of file boxBoxDistance.cpp.


Generated on Mon Feb 15 22:17:10 2010 for Bullet Collision Detection & Physics Library by  doxygen 1.6.1