EgtGeomKernel :
- modifiche a sistemazione topologie di intersezioni di curve composite - eliminazione di linee inutili in generale - cambio nome di variabili che nascondono omonime.
This commit is contained in:
+9
-12
@@ -143,7 +143,7 @@ static int LinePlaneDDistPar( const Point3d& ptPlane, const Vector3d& vtPlane
|
||||
static double LineLineSqDist( const Point3d& ptP1, const Vector3d& vtD1, const Point3d& ptP2, const Vector3d& vtD2) ;
|
||||
static double LineSegmentSqDist( const Point3d& ptPLn, const Vector3d& vtDLn,
|
||||
const Point3d& ptPSg, const Vector3d& vtDSg, double dSgLen) ;
|
||||
static bool CoplanarDiscTriangleInterferance( const Point3d& ptCen, double dRad, const Triangle3d& trTria, int nTriType) ;
|
||||
static bool CoplanarDiscTriangleInterference( const Point3d& ptCen, double dRad, const Triangle3d& trTria, int nTriType) ;
|
||||
static bool FindLineLineMinDistPar( const Point3d& ptL1, const Vector3d& vtV1,
|
||||
const Point3d& ptL2, const Vector3d& vtV2,
|
||||
double& dU1, double& dU2) ;
|
||||
@@ -742,13 +742,10 @@ CylSegmentEscapeDistOrtMotion( const Point3d& ptCylOrig, const Vector3d& vtCylAx
|
||||
// Lunghezza della componente del vettore radiale ortogonale alla linea di movimento
|
||||
double dDotRemRad = abs( vtRad * vtMove) ;
|
||||
double dOrtLen = sqrt( max( dCylRad * dCylRad - dDotRemRad * dDotRemRad, 0.)) ;
|
||||
// Cerco lungo la retta un punto che stia nel segmento e abbia distanza dal piano
|
||||
// abbia distanza dal piano +/- dOrtLen.
|
||||
Vector3d vtPlane = vtMove ^ vtCylAx ;
|
||||
vtPlane.Normalize() ;
|
||||
// Cerco lungo la retta un punto che stia nel segmento e abbia distanza dal piano +/- dOrtLen
|
||||
Vector3d vtD = ptSeg - ptCylOrig ;
|
||||
double dDotPlaneD = vtD * vtPlane ;
|
||||
double dDotPlaneSeg = vtSeg * vtPlane ;
|
||||
double dDotPlaneD = - vtD * vtPlane ;
|
||||
double dDotPlaneSeg = - vtSeg * vtPlane ;
|
||||
double dPlusU = ( dOrtLen - dDotPlaneD) / dDotPlaneSeg ;
|
||||
double dMinusU = ( - dOrtLen - dDotPlaneD) / dDotPlaneSeg ;
|
||||
Point3d ptTanPlus = ptSeg + dPlusU * vtSeg ;
|
||||
@@ -2446,7 +2443,7 @@ CAvDiskTriangle( const Point3d& ptDiskCen, const Vector3d& vtDiskAx, double dDis
|
||||
ptV1 - dVertEscapeDist[1] * vtMove,
|
||||
ptV2 - dVertEscapeDist[2] * vtMove) ;
|
||||
// Se non c'è interferenza fra triangolo proiettato e disco la distanza di fuga è nulla
|
||||
if ( ! CoplanarDiscTriangleInterferance( ptDiskCen, dDiskRad, trTriaOnPlane, TriangleType::CLOSED)) // OPEN EXACT O CLOSED ?
|
||||
if ( ! CoplanarDiscTriangleInterference( ptDiskCen, dDiskRad, trTriaOnPlane, TriangleType::CLOSED)) // OPEN EXACT O CLOSED ?
|
||||
return 0. ;
|
||||
double dSqSafeRad = dDiskRad * dDiskRad - 2 * dDiskRad * EPS_SMALL ;
|
||||
bool bInside[3] ;
|
||||
@@ -2548,7 +2545,7 @@ DiskTriaInteriorEscapeDistLongMot( const Point3d& ptDiskCen, double dDiskRad,
|
||||
// Se disco e triangolo sono complanari
|
||||
if ( AreSameVectorApprox( vtMove, trTria.GetN())) {
|
||||
double dDist = max( - PointPlaneSignedDist( ptDiskCen, trTria.GetP( 0), trTria.GetN()), 0.) ;
|
||||
if ( CoplanarDiscTriangleInterferance( ptDiskCen + dDist * vtMove, dDiskRad - EPS_SMALL, trTria, TriangleType::EXACT))
|
||||
if ( CoplanarDiscTriangleInterference( ptDiskCen + dDist * vtMove, dDiskRad - EPS_SMALL, trTria, TriangleType::EXACT))
|
||||
return dDist ;
|
||||
return 0. ;
|
||||
}
|
||||
@@ -2715,7 +2712,7 @@ DiskTriaInteriorEscapeDistGenMot( const Point3d& ptDiskCen, const Vector3d& vtDi
|
||||
// Se disco e triangolo sono complanari
|
||||
if ( AreSameVectorApprox( vtDiskAx, trTria.GetN())) {
|
||||
double dDist = max( ( ( trTria.GetP( 0) - ptDiskCen) * trTria.GetN()) / ( vtMove * trTria.GetN()), 0.) ;
|
||||
if ( CoplanarDiscTriangleInterferance( ptDiskCen + dDist * vtMove, dDiskRad, trTria, TriangleType::EXACT))
|
||||
if ( CoplanarDiscTriangleInterference( ptDiskCen + dDist * vtMove, dDiskRad, trTria, TriangleType::EXACT))
|
||||
return dDist ;
|
||||
return 0. ;
|
||||
}
|
||||
@@ -2868,7 +2865,7 @@ LineSegmentSqDist( const Point3d& ptPLn, const Vector3d& vtDLn,
|
||||
// L'informazione su n è contenuta nell'oggetto triangolo; quella su a non è passata
|
||||
// in quanto inutile sotto le nostre assunzioni.
|
||||
bool
|
||||
CoplanarDiscTriangleInterferance( const Point3d& ptCen, double dRad, const Triangle3d& trTria, int nTriType)
|
||||
CoplanarDiscTriangleInterference( const Point3d& ptCen, double dRad, const Triangle3d& trTria, int nTriType)
|
||||
{
|
||||
// Se il centro del disco non sta sul piano del triangolo, non sono complanari
|
||||
if ( abs( PointPlaneSignedDist( ptCen, trTria.GetP( 0), trTria.GetN())) > EPS_SMALL)
|
||||
@@ -2877,7 +2874,7 @@ CoplanarDiscTriangleInterferance( const Point3d& ptCen, double dRad, const Trian
|
||||
if ( IsPointInsideTriangle( ptCen, trTria, TriangleType::EXACT))
|
||||
return true ;
|
||||
|
||||
double dSqMinDist ;
|
||||
double dSqMinDist = 0 ;
|
||||
switch ( nTriType) {
|
||||
case OPEN :
|
||||
dSqMinDist = dRad * dRad - 2 * dRad * EPS_SMALL ;
|
||||
|
||||
Reference in New Issue
Block a user