OpenMEEG
Loading...
Searching...
No Matches
Triangle_triangle_intersection.h File Reference
#include <cmath>
Include dependency graph for Triangle_triangle_intersection.h:

Go to the source code of this file.

Namespaces

namespace  OpenMEEG
 

Macros

#define CROSS(dest, v1, v2)
 
#define DOT(v1, v2)
 
#define SUB(dest, v1, v2)
 
#define SCALAR(dest, alpha, v)
 
#define CHECK_MIN_MAX(p1, q1, r1, p2, q2, r2)
 
#define TRI_TRI_3D(p1, q1, r1, p2, q2, r2, dp2, dq2, dr2)
 
#define CONSTRUCT_INTERSECTION(p1, q1, r1, p2, q2, r2)
 
#define TRI_TRI_INTER_3D(p1, q1, r1, p2, q2, r2, dp2, dq2, dr2)
 
#define ORIENT_2D(a, b, c)
 
#define INTERSECTION_TEST_VERTEX(P1, Q1, R1, P2, Q2, R2)
 
#define INTERSECTION_TEST_EDGE(P1, Q1, R1, P2, Q2, R2)
 

Functions

bool OpenMEEG::tri_tri_overlap_test_3d (double p1[3], double q1[3], double r1[3], double p2[3], double q2[3], double r2[3])
 
bool OpenMEEG::coplanar_tri_tri3d (double p1[3], double q1[3], double r1[3], double p2[3], double q2[3], double r2[3], double N1[3], double N2[3])
 
bool OpenMEEG::tri_tri_overlap_test_2d (double p1[2], double q1[2], double r1[2], double p2[2], double q2[2], double r2[2])
 
bool OpenMEEG::tri_tri_intersection_test_3d (double p1[3], double q1[3], double r1[3], double p2[3], double q2[3], double r2[3], int *coplanar, double source[3], double target[3])
 
double OpenMEEG::triangle_area (double p[3], double q[3], double r[3])
 
bool OpenMEEG::ccw_tri_tri_intersection_2d (double p1[2], double q1[2], double r1[2], double p2[2], double q2[2], double r2[2])
 

Macro Definition Documentation

◆ CROSS

#define CROSS ( dest,
v1,
v2 )
Value:
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];

Definition at line 80 of file Triangle_triangle_intersection.h.

◆ DOT

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

Definition at line 87 of file Triangle_triangle_intersection.h.

◆ SUB

#define SUB ( dest,
v1,
v2 )
Value:
dest[0]=v1[0]-v2[0]; \
dest[1]=v1[1]-v2[1]; \
dest[2]=v1[2]-v2[2];

Definition at line 91 of file Triangle_triangle_intersection.h.

◆ SCALAR

#define SCALAR ( dest,
alpha,
v )
Value:
dest[0] = alpha * v[0]; \
dest[1] = alpha * v[1]; \
dest[2] = alpha * v[2];

Definition at line 97 of file Triangle_triangle_intersection.h.

◆ CHECK_MIN_MAX

#define CHECK_MIN_MAX ( p1,
q1,
r1,
p2,
q2,
r2 )
Value:
{\
SUB(v1,p2,q1)\
SUB(v2,p1,q1)\
CROSS(N1,v1,v2)\
SUB(v1,q2,q1)\
if (DOT(v1,N1) > 0.0f) return 0;\
SUB(v1,p2,p1)\
SUB(v2,r1,p1)\
CROSS(N1,v1,v2)\
SUB(v1,r2,p1) \
if (DOT(v1,N1) > 0.0f) return 0;\
else return 1; }
#define SUB(dest, v1, v2)
#define CROSS(dest, v1, v2)
#define DOT(v1, v2)

Definition at line 103 of file Triangle_triangle_intersection.h.

◆ TRI_TRI_3D

#define TRI_TRI_3D ( p1,
q1,
r1,
p2,
q2,
r2,
dp2,
dq2,
dr2 )
Value:
{ \
if (dp2 > 0.0f) { \
if (dq2 > 0.0f) CHECK_MIN_MAX(p1,r1,q1,r2,p2,q2) \
else if (dr2 > 0.0f) CHECK_MIN_MAX(p1,r1,q1,q2,r2,p2)\
else CHECK_MIN_MAX(p1,q1,r1,p2,q2,r2) }\
else if (dp2 < 0.0f) { \
if (dq2 < 0.0f) CHECK_MIN_MAX(p1,q1,r1,r2,p2,q2)\
else if (dr2 < 0.0f) CHECK_MIN_MAX(p1,q1,r1,q2,r2,p2)\
else CHECK_MIN_MAX(p1,r1,q1,p2,q2,r2)\
} else { \
if (dq2 < 0.0f) { \
if (dr2 >= 0.0f) CHECK_MIN_MAX(p1,r1,q1,q2,r2,p2)\
else CHECK_MIN_MAX(p1,q1,r1,p2,q2,r2)\
} \
else if (dq2 > 0.0f) { \
if (dr2 > 0.0f) CHECK_MIN_MAX(p1,r1,q1,p2,q2,r2)\
else CHECK_MIN_MAX(p1,q1,r1,q2,r2,p2)\
} \
else { \
if (dr2 > 0.0f) CHECK_MIN_MAX(p1,q1,r1,r2,p2,q2)\
else if (dr2 < 0.0f) CHECK_MIN_MAX(p1,r1,q1,r2,p2,q2)\
else return coplanar_tri_tri3d(p1,q1,r1,p2,q2,r2,N1,N2);\
}}}
#define CHECK_MIN_MAX(p1, q1, r1, p2, q2, r2)

Definition at line 119 of file Triangle_triangle_intersection.h.

◆ CONSTRUCT_INTERSECTION

#define CONSTRUCT_INTERSECTION ( p1,
q1,
r1,
p2,
q2,
r2 )

Definition at line 279 of file Triangle_triangle_intersection.h.

◆ TRI_TRI_INTER_3D

#define TRI_TRI_INTER_3D ( p1,
q1,
r1,
p2,
q2,
r2,
dp2,
dq2,
dr2 )
Value:
{ \
if (dp2 > 0.0f) { \
if (dq2 > 0.0f) CONSTRUCT_INTERSECTION(p1,r1,q1,r2,p2,q2) \
else if (dr2 > 0.0f) CONSTRUCT_INTERSECTION(p1,r1,q1,q2,r2,p2)\
else CONSTRUCT_INTERSECTION(p1,q1,r1,p2,q2,r2) }\
else if (dp2 < 0.0f) { \
if (dq2 < 0.0f) CONSTRUCT_INTERSECTION(p1,q1,r1,r2,p2,q2)\
else if (dr2 < 0.0f) CONSTRUCT_INTERSECTION(p1,q1,r1,q2,r2,p2)\
else CONSTRUCT_INTERSECTION(p1,r1,q1,p2,q2,r2)\
} else { \
if (dq2 < 0.0f) { \
if (dr2 >= 0.0f) CONSTRUCT_INTERSECTION(p1,r1,q1,q2,r2,p2)\
else CONSTRUCT_INTERSECTION(p1,q1,r1,p2,q2,r2)\
} \
else if (dq2 > 0.0f) { \
if (dr2 > 0.0f) CONSTRUCT_INTERSECTION(p1,r1,q1,p2,q2,r2)\
else CONSTRUCT_INTERSECTION(p1,q1,r1,q2,r2,p2)\
} \
else { \
if (dr2 > 0.0f) CONSTRUCT_INTERSECTION(p1,q1,r1,r2,p2,q2)\
else if (dr2 < 0.0f) CONSTRUCT_INTERSECTION(p1,r1,q1,r2,p2,q2)\
else { \
*coplanar = 1; \
return coplanar_tri_tri3d(p1,q1,r1,p2,q2,r2,N1,N2);\
} \
}} }
#define CONSTRUCT_INTERSECTION(p1, q1, r1, p2, q2, r2)

Definition at line 354 of file Triangle_triangle_intersection.h.

◆ ORIENT_2D

#define ORIENT_2D ( a,
b,
c )
Value:
((a[0]-c[0])*(b[1]-c[1])-(a[1]-c[1])*(b[0]-c[0]))

Definition at line 468 of file Triangle_triangle_intersection.h.

◆ INTERSECTION_TEST_VERTEX

#define INTERSECTION_TEST_VERTEX ( P1,
Q1,
R1,
P2,
Q2,
R2 )
Value:
{\
if (ORIENT_2D(R2,P2,Q1) >= 0.0f)\
if (ORIENT_2D(R2,Q2,Q1) <= 0.0f)\
if (ORIENT_2D(P1,P2,Q1) > 0.0f) {\
if (ORIENT_2D(P1,Q2,Q1) <= 0.0f) return 1; \
else return 0;} else {\
if (ORIENT_2D(P1,P2,R1) >= 0.0f)\
if (ORIENT_2D(Q1,R1,P2) >= 0.0f) return 1; \
else return 0;\
else return 0;}\
else \
if (ORIENT_2D(P1,Q2,Q1) <= 0.0f)\
if (ORIENT_2D(R2,Q2,R1) <= 0.0f)\
if (ORIENT_2D(Q1,R1,Q2) >= 0.0f) return 1; \
else return 0;\
else return 0;\
else return 0;\
else\
if (ORIENT_2D(R2,P2,R1) >= 0.0f) \
if (ORIENT_2D(Q1,R1,R2) >= 0.0f)\
if (ORIENT_2D(P1,P2,R1) >= 0.0f) return 1;\
else return 0;\
else \
if (ORIENT_2D(Q1,R1,Q2) >= 0.0f) {\
if (ORIENT_2D(R2,R1,Q2) >= 0.0f) return 1; \
else return 0; }\
else return 0; \
else return 0; \
}
#define ORIENT_2D(a, b, c)

Definition at line 471 of file Triangle_triangle_intersection.h.

◆ INTERSECTION_TEST_EDGE

#define INTERSECTION_TEST_EDGE ( P1,
Q1,
R1,
P2,
Q2,
R2 )
Value:
{ \
if (ORIENT_2D(R2,P2,Q1) >= 0.0f) {\
if (ORIENT_2D(P1,P2,Q1) >= 0.0f) { \
if (ORIENT_2D(P1,Q1,R2) >= 0.0f) return 1; \
else return 0;} else { \
if (ORIENT_2D(Q1,R1,P2) >= 0.0f){ \
if (ORIENT_2D(R1,P1,P2) >= 0.0f) return 1; else return 0;} \
else return 0; } \
} else {\
if (ORIENT_2D(R2,P2,R1) >= 0.0f) {\
if (ORIENT_2D(P1,P2,R1) >= 0.0f) {\
if (ORIENT_2D(P1,R1,R2) >= 0.0f) return 1; \
else {\
if (ORIENT_2D(Q1,R1,R2) >= 0.0f) return 1; else return 0;}}\
else return 0; }\
else return 0; }}

Definition at line 501 of file Triangle_triangle_intersection.h.