EgtGeomKernel 1.5g2 :
- aggiunte intersezioni tra linee ed archi - aggiunte intersezioni tra archi e archi - aggiunte funzioni di utilità per angoli.
This commit is contained in:
+11
-27
@@ -44,44 +44,28 @@ DistPointArc::DistPointArc( const Point3d& ptP, const ICurveArc& arArc)
|
||||
void
|
||||
DistPointArc::DistPointCircle( const Point3d& ptP, const ICurveArc& arArc)
|
||||
{
|
||||
// vettori ausiliari
|
||||
Vector3d vtDiff = ptP - arArc.GetCenter() ;
|
||||
double dDistN = vtDiff * arArc.GetNormVersor() ;
|
||||
Vector3d vtDiffPlane = vtDiff - dDistN * arArc.GetNormVersor() ;
|
||||
double dDistPlane = fabs( vtDiffPlane.Len() - arArc.GetRadius()) ;
|
||||
// calcolo della distanza
|
||||
if ( fabs( dDistPlane) > EPS_ZERO && fabs( dDistN) > EPS_ZERO)
|
||||
m_dDist = sqrt( dDistPlane * dDistPlane + dDistN * dDistN) ;
|
||||
else if ( fabs( dDistPlane) > EPS_ZERO)
|
||||
m_dDist = dDistPlane ;
|
||||
else if ( fabs( dDistN) > EPS_ZERO)
|
||||
m_dDist = fabs( dDistN) ;
|
||||
else
|
||||
m_dDist = 0 ;
|
||||
// calcolo del parametro del punto a minima distanza
|
||||
if ( vtDiffPlane.Normalize()) {
|
||||
bool bDet ;
|
||||
double dAngDeg ;
|
||||
double dParam ;
|
||||
Point3d ptMinDist ;
|
||||
arArc.GetStartVersor().GetRotation( vtDiffPlane, arArc.GetNormVersor(), dAngDeg, bDet) ;
|
||||
if ( arArc.GetAngCenter() > 0 && dAngDeg < 0)
|
||||
dAngDeg += 360 ;
|
||||
else if ( arArc.GetAngCenter() < 0 && dAngDeg > 0)
|
||||
dAngDeg -= 360 ;
|
||||
dParam = dAngDeg / arArc.GetAngCenter() ;
|
||||
// se il punto non sta sul centro dell'arco, posso calcolarne la posizione angolare
|
||||
double dAngDeg ;
|
||||
if ( arArc.CalcPointAngle( ptP, dAngDeg)) {
|
||||
double dParam = dAngDeg / arArc.GetAngCenter() ;
|
||||
if ( dParam < 0)
|
||||
dParam = 0 ;
|
||||
else if ( dParam > 1)
|
||||
dParam = 1 ;
|
||||
// calcolo del punto di minima distanza
|
||||
Point3d ptMinDist ;
|
||||
arArc.GetPointD1D2( dParam, ICurve::FROM_MINUS, ptMinDist) ;
|
||||
// calcolo del valore di minima distanza
|
||||
m_dDist = Dist( ptP, ptMinDist) ;
|
||||
// salvo i dati
|
||||
m_Info.push_back( MinDistPCInfo( MDPCI_NORMAL, dParam, ptMinDist)) ;
|
||||
}
|
||||
// altrimenti tutti i punti della circonferenza sono a minima distanza
|
||||
else {
|
||||
// calcolo del valore di minima distanza
|
||||
m_dDist = sqrt( SqDist( ptP, arArc.GetCenter()) + arArc.GetRadius() * arArc.GetRadius()) ;
|
||||
// salvo iniziale e finale, come estremi del range
|
||||
Point3d ptMinDist ;
|
||||
// tutti i punti della circonferenza sono a minima distanza salvo iniziale e finale
|
||||
arArc.GetStartPoint( ptMinDist) ;
|
||||
m_Info.push_back( MinDistPCInfo( MDPCI_START_CONT, 0, ptMinDist)) ;
|
||||
arArc.GetEndPoint( ptMinDist) ;
|
||||
|
||||
Reference in New Issue
Block a user