EgtGeomKernel 1.6c2 :
- aggiunte funzioni per circonferenze e archi tangenti.
This commit is contained in:
@@ -74,6 +74,53 @@ CalcLinePointTgCircle( const Point3d& ptP, const Point3d& ptCen, double dRad, BI
|
||||
return 2 ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
CalcCircleCenTgCircle( const Point3d& ptC, const Point3d& ptCen, double dRad, BIPNTVECTOR& vCenPtg)
|
||||
{
|
||||
// --- si lavora nel piano XY ---
|
||||
|
||||
// svuoto il vettore dei risultati (sono coppie centro-punto di tangenza)
|
||||
vCenPtg.clear() ;
|
||||
|
||||
// se il raggio è negativo non ci sono soluzioni
|
||||
if ( dRad < - EPS_SMALL)
|
||||
return 0 ;
|
||||
|
||||
// versore e distanza tra i centri nel piano XY
|
||||
Vector3d vtDir = ptCen - ptC ;
|
||||
vtDir.z = 0 ;
|
||||
double dDist = vtDir.Len() ;
|
||||
vtDir /= dDist ;
|
||||
|
||||
// se il raggio è nullo ...
|
||||
if ( dRad < EPS_SMALL) {
|
||||
// se la distanza tra i punti è significativa, c'è una soluzione
|
||||
if ( dDist > EPS_SMALL) {
|
||||
vCenPtg.emplace_back( ptC, ptCen) ;
|
||||
return 1 ;
|
||||
}
|
||||
// altrimenti, nessuna soluzione
|
||||
else
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
// se questa distanza è uguale al raggio, non ci sono soluzioni
|
||||
if ( fabs( dDist - dRad) < EPS_SMALL)
|
||||
return 0 ;
|
||||
// se è minore del raggio, c'è una sola soluzione
|
||||
else if ( dDist < dRad) {
|
||||
vCenPtg.emplace_back( ptC, ptCen - vtDir * dRad) ;
|
||||
return 1 ;
|
||||
}
|
||||
// altrimenti ci sono due soluzioni
|
||||
else {
|
||||
vCenPtg.emplace_back( ptC, ptCen - vtDir * dRad) ;
|
||||
vCenPtg.emplace_back( ptC, ptCen + vtDir * dRad) ;
|
||||
return 2 ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FindPointOnArc( const CurveArc& crvArc, const Vector3d& vtDirP, const Point3d& ptNear, Point3d& ptP)
|
||||
|
||||
Reference in New Issue
Block a user