diff --git a/Vector3d.cpp b/Vector3d.cpp index 2612bed..cb8143f 100644 --- a/Vector3d.cpp +++ b/Vector3d.cpp @@ -65,6 +65,26 @@ FromUprightOrtho( const Vector3d& vtV) return ( vtV ^ vtAx) ; } +//---------------------------------------------------------------------------- +// Definizione dall'ortogonale al primo ricevuto, orizzontale e pił vicino al secondo +//---------------------------------------------------------------------------- +Vector3d +FromNearestHorizontalOrtho( const Vector3d& vtV, const Vector3d& vtNear) +{ + // se vettore nullo o coincidente con asse Z, imposto asse orizzontale pił vicino a Near + if ( vtV.IsZero() || vtV.IsZplus() || vtV.IsZminus()) { + Vector3d vtHor( vtNear.x, vtNear.y, 0) ; + if ( vtHor.Normalize( EPS_ZERO)) + return vtHor ; + else + return X_AX ; + } + // caso generico + Vector3d vtHor = vtV ^ Z_AX ; + vtHor.Normalize( EPS_ZERO) ; + return ( vtHor * vtNear >= 0 ? vtHor : -vtHor) ; +} + //---------------------------------------------------------------------------- // Lunghezza del vettore //----------------------------------------------------------------------------