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.
This commit is contained in:
DarioS
2022-05-14 11:59:43 +02:00
parent 76e490a583
commit bb8c0f766e
4 changed files with 16 additions and 15 deletions
+4 -4
View File
@@ -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() ;
}
+4 -4
View File
@@ -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() ;
}
+4 -4
View File
@@ -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()) ;
}
+4 -3
View File
@@ -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()) ;
}