diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index ae645e6..aa0371b 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/Triangulate.cpp b/Triangulate.cpp index c45fed7..37a8bea 100644 --- a/Triangulate.cpp +++ b/Triangulate.cpp @@ -648,7 +648,11 @@ Triangulate::SameDirection( const Point3d& ptA, const Point3d& ptB, const Point3 bool Triangulate::Collinear( const Point3d& ptA, const Point3d& ptB, const Point3d& ptC, double dToler) { - return ( abs( TwoArea( ptA, ptB, ptC)) < dToler * dToler) ; + double dSqDistA = SquareDist( ptA, ptB) ; + double dSqDistB = SquareDist( ptB, ptC) ; + double dSqDistC = SquareDist( ptC, ptA) ; + double dTwoArea = abs( TwoArea( ptA, ptB, ptC)) ; + return ( dTwoArea * dTwoArea < dToler * dToler * max( { dSqDistA, dSqDistB, dSqDistC})) ; } //---------------------------------------------------------------------------- diff --git a/Triangulate.h b/Triangulate.h index 6fe4a83..c95549a 100644 --- a/Triangulate.h +++ b/Triangulate.h @@ -36,7 +36,7 @@ class Triangulate double TwoArea( const Point3d& ptA, const Point3d& ptB, const Point3d& ptC) ; bool AreSamePoint( const Point3d& ptA, const Point3d& ptB, double dToler = EPS_SMALL) ; bool SameDirection( const Point3d& ptA, const Point3d& ptB, const Point3d& ptC) ; - bool Collinear( const Point3d& ptA, const Point3d& ptB, const Point3d& ptC, double dToler = 0.1 * EPS_SMALL) ; + bool Collinear( const Point3d& ptA, const Point3d& ptB, const Point3d& ptC, double dToler = EPS_TRIA_H) ; bool TriangleIsCCW( const Point3d& ptA, const Point3d& ptB, const Point3d& ptC, double dToler = 0.1 * EPS_SMALL) ; bool TestIntersection( const Point3d& ptA1, const Point3d& ptA2, const Point3d& ptB1, const Point3d& ptB2) ; bool TestPointInTriangle( const Point3d& ptP, const Point3d& ptA, const Point3d& ptB, const Point3d& ptC) ;