#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]) |
|
|
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); \
} |
|
|
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]; |
|
|
|
|
|
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); \
} |
|
|
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; \
} \
} |
|
|
|
|
|
Initializer: \
isect0=VV0+(VV1-VV0)*D0/(D0-D1); \
isect1=VV0+(VV2-VV0)*D0/(D0-D2); |
|
|
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; \
} \
} |
|
|
Initializer: \
if(a>b) \
{ \
float c; \
c=a; \
a=b; \
b=c; \
} |
|
|
Initializer: \
dest[0]=v1[0]-v2[0]; \
dest[1]=v1[1]-v2[1]; \
dest[2]=v1[2]-v2[2]; |
|
|
|
|
|
|
1.2.3 written by Dimitri van Heesch,
© 1997-2000