From bb8c0f766e3f0c0930cab2f71f31c4ea0e2589ef Mon Sep 17 00:00:00 2001 From: DarioS Date: Sat, 14 May 2022 11:59:43 +0200 Subject: [PATCH] EgtGeomKernel : - corretta CDeBoxClosedSurfTm caso verifica box interno a superficie chiusa - modificata CDeConeFrustumClosedSurfTm verifica tronco di cono interno a superficie chiusa tramite verifica del centro del cono - modificata CDeCylClosedSurfTm verifica cilindro interno a superficie chiusa tramite verifica del centro del cilindro - modificata CDeRectPrismoidClosedSurfTm verifica prismoide retto interno a superficie chiusa tramite verifica del centro del prismoide. --- CDeBoxClosedSurfTm.cpp | 8 ++++---- CDeConeFrustumClosedSurfTm.cpp | 8 ++++---- CDeCylClosedSurfTm.cpp | 8 ++++---- CDeRectPrismoidClosedSurfTm.cpp | 7 ++++--- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/CDeBoxClosedSurfTm.cpp b/CDeBoxClosedSurfTm.cpp index e851ea6..a616dea 100644 --- a/CDeBoxClosedSurfTm.cpp +++ b/CDeBoxClosedSurfTm.cpp @@ -46,9 +46,9 @@ CDeBoxClosedSurfTm( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDi if ( ! Stm.IsClosed()) return false ; // Verifico se il box è dentro la superficie tramite calcolo distanza minima. - Point3d ptBoxOrig, ptBoxMax ; - b3Box.GetMinMax( ptBoxOrig, ptBoxMax) ; - DistPointSurfTm DistBoxOrigSurfCalc( ptBoxOrig, Stm) ; + Point3d ptBoxCen = ORIG + vtDiag / 2 ; + ptBoxCen.ToGlob( frBox) ; + DistPointSurfTm DistBoxCenSurfCalc( ptBoxCen, Stm) ; // Se il box è interno c'è collisione - return DistBoxOrigSurfCalc.IsPointInside() ; + return DistBoxCenSurfCalc.IsPointInside() ; } diff --git a/CDeConeFrustumClosedSurfTm.cpp b/CDeConeFrustumClosedSurfTm.cpp index 73cad3e..88800da 100644 --- a/CDeConeFrustumClosedSurfTm.cpp +++ b/CDeConeFrustumClosedSurfTm.cpp @@ -56,9 +56,9 @@ CDeConeFrustumClosedSurfTm( const Frame3d& frCone, double dBaseRad, double dTopR if ( ! Stm.IsClosed()) return false ; // Verifico se il tronco di cono è dentro la superficie tramite calcolo distanza minima. - Point3d ptConeOrig ; - ptConeOrig.ToGlob( frCone) ; - DistPointSurfTm DistConeOrigSurfCalc( ptConeOrig, Stm) ; + Point3d ptConeCen( 0, 0, dHeight / 2) ; + ptConeCen.ToGlob( frCone) ; + DistPointSurfTm DistConeCenSurfCalc( ptConeCen, Stm) ; // Se il tronco di cono è interno c'è collisione - return DistConeOrigSurfCalc.IsPointInside() ; + return DistConeCenSurfCalc.IsPointInside() ; } \ No newline at end of file diff --git a/CDeCylClosedSurfTm.cpp b/CDeCylClosedSurfTm.cpp index d7f51fa..d4641d2 100644 --- a/CDeCylClosedSurfTm.cpp +++ b/CDeCylClosedSurfTm.cpp @@ -52,9 +52,9 @@ CDeCylClosedSurfTm( const Frame3d& frCyl, double dR, double dH, double dSafeDist if ( ! Stm.IsClosed()) return false ; // Verifico se il cilindro è dentro la superficie tramite calcolo distanza minima. - Point3d ptCylOrig( 0., 0., - dSafeDist) ; - ptCylOrig.ToGlob( frC) ; - DistPointSurfTm DistCylOrigSurfCalc( ptCylOrig, Stm) ; + Point3d ptCylCen( 0, 0, dH / 2) ; + ptCylCen.ToGlob( frC) ; + DistPointSurfTm DistCylCenSurfCalc( ptCylCen, Stm) ; // Se il cilindro è interno c'è collisione - return ( DistCylOrigSurfCalc.IsPointInside()) ; + return ( DistCylCenSurfCalc.IsPointInside()) ; } diff --git a/CDeRectPrismoidClosedSurfTm.cpp b/CDeRectPrismoidClosedSurfTm.cpp index 358b426..0d7584f 100644 --- a/CDeRectPrismoidClosedSurfTm.cpp +++ b/CDeRectPrismoidClosedSurfTm.cpp @@ -63,8 +63,9 @@ CDeRectPrismoidClosedSurfTm( const Frame3d& frPrismoid, double dLenghtBaseX, dou if ( ! Stm.IsClosed()) return false ; // Verifico se il tronco di piramide è dentro la superficie tramite calcolo distanza minima. - Point3d ptPyrOrig = frPrismoid.Orig() ; - DistPointSurfTm DistBoxOrigSurfCalc( ptPyrOrig, Stm) ; + Point3d ptPyrCen( 0, 0, dHeight / 2) ; + ptPyrCen.ToGlob( frPrismoid) ; + DistPointSurfTm DistPyrCenSurfCalc( ptPyrCen, Stm) ; // C'è collisione se il tronco di piramide è interno. - return ( DistBoxOrigSurfCalc.IsPointInside()) ; + return ( DistPyrCenSurfCalc.IsPointInside()) ; }