From e51df31d13779b29b0ecc067bef40283139644b4 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 30 Jul 2024 16:25:17 +0200 Subject: [PATCH] Include : - aggiunta di una funzione per la distanza tra punti. --- EGkPoint3d.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/EGkPoint3d.h b/EGkPoint3d.h index eb82b46..699a514 100644 --- a/EGkPoint3d.h +++ b/EGkPoint3d.h @@ -335,6 +335,30 @@ AreSamePointXYEpsilon( const Point3d& ptP1, const Point3d& ptP2, double dToler) return ( SqDistXY( ptP1, ptP2) < ( dToler * dToler)) ; } +//---------------------------------------------------------------------------- +//! Verifica se due punti sono quasi coincidenti per esclusione (tolleranza come parametro) +//---------------------------------------------------------------------------- +inline bool +AreSamePointStepEpsilon( const Point3d& ptP1, const Point3d& ptP2, double dToler) +{ + double dX = ptP1.x - ptP2.x ; + if( dX > dToler) + return false ; + else { + double dY = ptP1.y - ptP2.y ; + if( dY > dToler) + return false ; + else { + double dTol = dToler * dToler ; + double dX2 = dX * dX ; + double dY2 = dY * dY ; + double dZ = ptP1.z- ptP2.z ; + double dZ2 = dZ * dZ ; + return dX2 + dY2 + dZ2 < dTol ; + } + } +} + //---------------------------------------------------------------------------- //! Verifica se due punti sono quasi coincidenti (Small error -> Approx) //---------------------------------------------------------------------------- @@ -353,6 +377,30 @@ AreSamePointXYApprox( const Point3d& ptP1, const Point3d& ptP2) return ( SqDistXY( ptP1, ptP2) < SQ_EPS_SMALL) ; } +//---------------------------------------------------------------------------- +//! Verifica se due punti sono quasi coincidenti per esclusione (tolleranza come parametro) +//---------------------------------------------------------------------------- +inline bool +AreSamePointStepApprox( const Point3d& ptP1, const Point3d& ptP2) +{ + double dX = ptP1.x - ptP2.x ; + if( dX > EPS_SMALL) + return false ; + else { + double dY = ptP1.y - ptP2.y ; + if( dY > EPS_SMALL) + return false ; + else { + double dTol = SQ_EPS_SMALL ; + double dX2 = dX * dX ; + double dY2 = dY * dY ; + double dZ = ptP1.z- ptP2.z ; + double dZ2 = dZ * dZ ; + return dX2 + dY2 + dZ2 < dTol ; + } + } +} + //---------------------------------------------------------------------------- //! Verifica se due punti sono esattamente coincidenti (Zero error -> Exact) //---------------------------------------------------------------------------- @@ -371,6 +419,30 @@ AreSamePointXYExact( const Point3d& ptP1, const Point3d& ptP2) return ( SqDistXY( ptP1, ptP2) < SQ_EPS_ZERO) ; } +//---------------------------------------------------------------------------- +//! Verifica se due punti sono quasi coincidenti per esclusione (tolleranza come parametro) +//---------------------------------------------------------------------------- +inline bool +AreSamePointStepExact( const Point3d& ptP1, const Point3d& ptP2) +{ + double dX = ptP1.x - ptP2.x ; + if( dX > EPS_ZERO) + return false ; + else { + double dY = ptP1.y - ptP2.y ; + if( dY > EPS_ZERO) + return false ; + else { + double dTol = SQ_EPS_ZERO ; + double dX2 = dX * dX ; + double dY2 = dY * dY ; + double dZ = ptP1.z- ptP2.z ; + double dZ2 = dZ * dZ ; + return dX2 + dY2 + dZ2 < dTol ; + } + } +} + //---------------------------------------------------------------------------- //! Restituisce una copia in locale del punto passato //----------------------------------------------------------------------------