From afef5597b23525d82561c7d280c4e6a8d9592efc Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 12 Jan 2026 08:15:06 +0100 Subject: [PATCH] EgtGeomKernel : - tentaivo di correzione intersezione tra segmenti di retta quasi paralleli. --- IntersLineLine.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/IntersLineLine.cpp b/IntersLineLine.cpp index 896df6c..c87691c 100644 --- a/IntersLineLine.cpp +++ b/IntersLineLine.cpp @@ -158,6 +158,16 @@ IntersLineLine::IntersFiniteLines( const CurveLine& Line1, const CurveLine& Line bool bParallel = ( abs( dCrossXY) < SIN_EPS_ANG_ZERO * ( dLen1XY * dLen2XY)) ; // flag per segmenti che si allontanano significativamente bool bFarEnds = ( nS1Side != 0 || nE1Side != 0 || nS2Side != 0 || nE2Side != 0) ; + // analisi casi speciali di quasi parallelismo + if ( ! bParallel && abs( dCrossXY) < ( 0.1 * DEGTORAD) * ( dLen1XY * dLen2XY)) { + if (( nS1Side == 0 && nS2Side == 0 && ! AreSamePointXYEpsilon( ptS1, ptS2, 2 * EPS_SMALL)) || + ( nS1Side == 0 && nE2Side == 0 && ! AreSamePointXYEpsilon( ptS1, ptE2, 2 * EPS_SMALL)) || + ( nE1Side == 0 && nS2Side == 0 && ! AreSamePointXYEpsilon( ptE1, ptS2, 2 * EPS_SMALL)) || + ( nE1Side == 0 && nE2Side == 0 && ! AreSamePointXYEpsilon( ptE1, ptE2, 2 * EPS_SMALL))) { + bParallel = true ; + bFarEnds = false ; + } + } // se non sono paralleli e si allontanano tra loro abbastanza if ( ! bParallel && bFarEnds) {