#ifndef extended_predicates_h #define extended_predicates_h #include #include "implicit_point.h" #include "delaunay.h" #pragma intrinsic(fabs) //------------------------ // Basic operations //------------------------ // Input: two points p and q, having coordinates p=(px,py,pz), q=(qx,qy,qz). // Output: 1 -> if p and q have the same coordinates, // 0 -> otherwise. static inline uint32_t same_point(const double* p, const double* q) { return (p[0] == q[0] && p[1] == q[1] && p[2] == q[2]); } //----------------------------------- // Signe-version of basic predicates //----------------------------------- static inline int signe_orient2d(const double* p, const double* q, const double* r) { return orient2d(p[0], p[1], q[0], q[1], r[0], r[1]); } static inline int signe_orient3d(const double* p, const double* q, const double* r, const double* s) { return orient3d(p[0], p[1], p[2], q[0], q[1], q[2], r[0], r[1], r[2], s[0], s[1], s[2]); } bool misAlignment(const double * p, const double * q, const double * r); uint32_t same_half_plane(const double * p, const double * q, const double * v1, const double * v2); uint32_t pointInInnerSegment(const double * p, const double * v1, const double * v2); uint32_t pointInSegment(const double * p, const double * v1, const double * v2); uint32_t innerSegmentsCross(const double* u1, const double* u2, const double* v1, const double* v2); uint32_t pointInInnerTriangle(const double * p, const double * v1, const double * v2, const double * v3); uint32_t pointInTriangle(const double * p, const double * v1, const double * v2, const double * v3); uint32_t innerSegmentCrossesInnerTriangle(const double * u1, const double * u2, const double * v1, const double * v2, const double * v3); uint32_t innerSegmentCrossesTriangle(const double * u1, const double * u2, const double * v1, const double * v2, const double * v3); int triangles_overlap(const double* v11, const double* v12, const double* v13, const double* v21, const double* v22, const double* v23); int triangle_intersects_inner_tet( const double* v1, const double* v2, const double* v3, const double* t1, const double* t2, const double* t3, const double* t4); #endif /* extended_predicates_h */