EgtGeomKernel :

- in Vector3d creata variante di GetRotation con parametro dEpsZero per stabilire soglia una sola soluzione invece di due.
This commit is contained in:
DarioS
2023-04-17 09:28:25 +02:00
parent c925c6a17a
commit d1790d8f07
+4 -2
View File
@@ -470,18 +470,20 @@ Vector3d::GetAngleXY( const Vector3d& vtEnd, double& dAngDeg) const
// all'asse di rotazione sulla stessa direzione della componente perpendicolare di vtEnd
//----------------------------------------------------------------------------
bool
Vector3d::GetRotation( const Vector3d& vtEnd, const Vector3d& vtAx, double& dAngDeg, bool& bDet) const
Vector3d::GetRotation( const Vector3d& vtEnd, const Vector3d& vtAx, double dEpsZero, double& dAngDeg, bool& bDet) const
{
// ricavo versore asse di rotazione
Vector3d vtDirAx = vtAx ;
if ( ! vtDirAx.Normalize())
return false ;
// verifico epsilon per vettore nullo
dEpsZero = std::min( EPS_SMALL, abs( dEpsZero)) ;
// ricavo le componenti perpendicolari all'asse di rotazione
Vector3d vtPerp = *this - vtDirAx * ( *this * vtDirAx) ;
Vector3d vtPerpE = vtEnd - vtDirAx * ( vtEnd * vtDirAx) ;
// se sono entrambe non nulle : angolo determinato
if ( ! vtPerp.IsZero() && ! vtPerpE.IsZero()) {
if ( vtPerp.SqLen() > dEpsZero * dEpsZero && vtPerpE.SqLen() > dEpsZero * dEpsZero) {
// secondo vettore perpendicolare ad asse e a componente perpendicolare
Vector3d vtPerp2 = vtDirAx ^ vtPerp ;
// proporzionali a seno e coseno del perpendicolare E