From ece85acc2dc1fd5873a20bc7b27eb5f9cc5b0465 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 28 Jan 2020 18:27:25 +0000 Subject: [PATCH] EgtGeomKernel 2.2a5 : - miglioria a Collinear di Triangulate. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes Triangulate.cpp | 6 +++++- Triangulate.h | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index ae645e68a3e7cdb29fc3cd91afb377cc121f5415..aa0371b3bb214ce92152ad2ac4385351f6a55fad 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&QA&A-_cnHkL{D{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-XmlGI delta 94 zcmdlNy)SyhFE&Qg&A-_cnHfzdD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-X4V@L 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) ;