Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

tritri.c File Reference

#include <math.h>

Go to the source code of this file.

Defines

#define USE_EPSILON_TEST   TRUE
#define EPSILON   0.000001
#define CROSS(dest,v1,v2)
#define DOT(v1,v2)    (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])
#define SUB(dest,v1,v2)
#define SORT(a,b)
#define ISECT(VV0,VV1,VV2,D0,D1,D2,isect0,isect1)
#define COMPUTE_INTERVALS(VV0,VV1,VV2,D0,D1,D2,D0D1,D0D2,isect0,isect1)
#define EDGE_EDGE_TEST(V0,U0,U1)
#define EDGE_AGAINST_TRI_EDGES(V0,V1,U0,U1,U2)
#define POINT_IN_TRI(V0,U0,U1,U2)

Functions

int coplanar_tri_tri (float N[3],float V0[3],float V1[3],float V2[3], float U0[3],float U1[3],float U2[3])


Define Documentation

#define COMPUTE_INTERVALS( VV0, VV1, VV2, D0, D1, D2, D0D1, D0D2, isect0, isect1 )
 

Initializer:

\
  if(D0D1>0.0f)                                         \
  {                                                     \
                        \
      \
    ISECT(VV2,VV0,VV1,D2,D0,D1,isect0,isect1);          \
  }                                                     \
  else if(D0D2>0.0f)                                    \
  {                                                     \
                        \
    ISECT(VV1,VV0,VV2,D1,D0,D2,isect0,isect1);          \
  }                                                     \
  else if(D1*D2>0.0f || D0!=0.0f)                       \
  {                                                     \
        \
    ISECT(VV0,VV1,VV2,D0,D1,D2,isect0,isect1);          \
  }                                                     \
  else if(D1!=0.0f)                                     \
  {                                                     \
    ISECT(VV1,VV0,VV2,D1,D0,D2,isect0,isect1);          \
  }                                                     \
  else if(D2!=0.0f)                                     \
  {                                                     \
    ISECT(VV2,VV0,VV1,D2,D0,D1,isect0,isect1);          \
  }                                                     \
  else                                                  \
  {                                                     \
                             \
    return coplanar_tri_tri(N1,V0,V1,V2,U0,U1,U2);      \
  }

#define CROSS( dest, v1, v2 )
 

Initializer:

\
              dest[0]=v1[1]*v2[2]-v1[2]*v2[1]; \
              dest[1]=v1[2]*v2[0]-v1[0]*v2[2]; \
              dest[2]=v1[0]*v2[1]-v1[1]*v2[0];

#define DOT( v1, v2 )   (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])
 

#define EDGE_AGAINST_TRI_EDGES( V0, V1, U0, U1, U2 )
 

Initializer:

\
{                                              \
  float Ax,Ay,Bx,By,Cx,Cy,e,d,f;               \
  Ax=V1[i0]-V0[i0];                            \
  Ay=V1[i1]-V0[i1];                            \
             \
  EDGE_EDGE_TEST(V0,U0,U1);                    \
             \
  EDGE_EDGE_TEST(V0,U1,U2);                    \
             \
  EDGE_EDGE_TEST(V0,U2,U0);                    \
}

#define EDGE_EDGE_TEST( V0, U0, U1 )
 

Initializer:

\
  Bx=U0[i0]-U1[i0];                                   \
  By=U0[i1]-U1[i1];                                   \
  Cx=V0[i0]-U0[i0];                                   \
  Cy=V0[i1]-U0[i1];                                   \
  f=Ay*Bx-Ax*By;                                      \
  d=By*Cx-Bx*Cy;                                      \
  if((f>0 && d>=0 && d<=f) || (f<0 && d<=0 && d>=f))  \
  {                                                   \
    e=Ax*Cy-Ay*Cx;                                    \
    if(f>0)                                           \
    {                                                 \
      if(e>=0 && e<=f) return 1;                      \
    }                                                 \
    else                                              \
    {                                                 \
      if(e<=0 && e>=f) return 1;                      \
    }                                                 \
  }

#define EPSILON   0.000001
 

#define ISECT( VV0, VV1, VV2, D0, D1, D2, isect0, isect1 )
 

Initializer:

\
              isect0=VV0+(VV1-VV0)*D0/(D0-D1);    \
              isect1=VV0+(VV2-VV0)*D0/(D0-D2);

#define POINT_IN_TRI( V0, U0, U1, U2 )
 

Initializer:

\
{                                           \
  float a,b,c,d0,d1,d2;                     \
             \
    \
  a=U1[i1]-U0[i1];                          \
  b=-(U1[i0]-U0[i0]);                       \
  c=-a*U0[i0]-b*U0[i1];                     \
  d0=a*V0[i0]+b*V0[i1]+c;                   \
                                            \
  a=U2[i1]-U1[i1];                          \
  b=-(U2[i0]-U1[i0]);                       \
  c=-a*U1[i0]-b*U1[i1];                     \
  d1=a*V0[i0]+b*V0[i1]+c;                   \
                                            \
  a=U0[i1]-U2[i1];                          \
  b=-(U0[i0]-U2[i0]);                       \
  c=-a*U2[i0]-b*U2[i1];                     \
  d2=a*V0[i0]+b*V0[i1]+c;                   \
  if(d0*d1>0.0)                             \
  {                                         \
    if(d0*d2>0.0) return 1;                 \
  }                                         \
}

#define SORT( a, b )
 

Initializer:

\
             if(a>b)    \
             {          \
               float c; \
               c=a;     \
               a=b;     \
               b=c;     \
             }

#define SUB( dest, v1, v2 )
 

Initializer:

\
            dest[0]=v1[0]-v2[0]; \
            dest[1]=v1[1]-v2[1]; \
            dest[2]=v1[2]-v2[2];

#define USE_EPSILON_TEST   TRUE
 


Function Documentation

int coplanar_tri_tri ( float N[3],
float V0[3],
float V1[3],
float V2[3],
float U0[3],
float U1[3],
float U2[3] )
 


Generated at Sat Nov 18 00:15:14 2000 for coldet by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000