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) {