From 1f47402215759ab4abc096033430841e34b1fad2 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 9 Jun 2026 16:50:20 +0200 Subject: [PATCH] EgtGeomKernel : - piccola correzione. --- IntersLineCyl.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/IntersLineCyl.cpp b/IntersLineCyl.cpp index ae40e16..dc706d9 100644 --- a/IntersLineCyl.cpp +++ b/IntersLineCyl.cpp @@ -44,14 +44,17 @@ IntersLineCyl( const Point3d& ptP, const Vector3d& vtV, double dH, double dRad, int nBasInt = 0 ; if ( abs( vtV.z) > EPS_ZERO) { // le linee tangenti al cilindro non sono considerate intersecanti + double dEpsRad = ( vtV.IsZeroXY() ? - EPS_SMALL : EPS_SMALL) ; + if ( bIgnoreTap) + dEpsRad = 0. ; ptInt1 = ptP + ( ( 0 - ptP.z) / vtV.z) * vtV ; - if ( ptInt1.x * ptInt1.x + ptInt1.y * ptInt1.y < dRad * dRad) { + if ( ptInt1.x * ptInt1.x + ptInt1.y * ptInt1.y < dRad * dRad + 2 * dRad * dEpsRad) { nBasInt += 1 ; vtN1 = - Z_AX ; dU1 = ( ( 0 - ptP.z) / vtV.z) ; } ptInt2 = ptP + ( ( dH - ptP.z) / vtV.z) * vtV ; - if ( ptInt2.x * ptInt2.x + ptInt2.y * ptInt2.y < dRad * dRad) { + if ( ptInt2.x * ptInt2.x + ptInt2.y * ptInt2.y < dRad * dRad + 2 * dRad * dEpsRad) { nBasInt += 2 ; vtN2 = Z_AX ; dU2 = ( ( dH - ptP.z) / vtV.z) ; @@ -75,8 +78,8 @@ IntersLineCyl( const Point3d& ptP, const Vector3d& vtV, double dH, double dRad, // Determino le intersezioni con la superficie laterale del cilindro DBLVECTOR vdCoeff{ ptP.x * ptP.x + ptP.y * ptP.y - dRad * dRad, - 2 * ( ptP.x * vtV.x + ptP.y * vtV.y), - vtV.x * vtV.x + vtV.y * vtV.y} ; + 2 * ( ptP.x * vtV.x + ptP.y * vtV.y), + vtV.x * vtV.x + vtV.y * vtV.y} ; DBLVECTOR vdRoots ; int nRoot = PolynomialRoots( 2, vdCoeff, vdRoots) ;