ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magicsld/Outils_Math.vb
(Generate patch)

Comparing magicsld/Outils_Math.vb (file contents):
Revision 129 by bournival, Mon Aug 20 21:30:28 2007 UTC vs.
Revision 130 by bournival, Wed Jul 30 21:26:03 2008 UTC

# Line 1 | Line 1
1 + Imports System.Math
2 +
3   Module Outils_Math
4  
5  
# Line 778 | Line 780 | Module Outils_Math
780  
781      End Sub
782  
783 +
784 +    ''' <summary>
785 +    ''' Retourne l'angle entre 2 vecteurs
786 +    ''' </summary>
787 +    ''' <param name="u">Le premier vecteur</param>
788 +    ''' <param name="v">Le second vecteur</param>
789 +    ''' <returns>Un angle en radian</returns>
790 +    ''' <remarks>Retourne Pi si les 2 vecteurs sont d'orientation identique mais de direction opposés</remarks>
791      Public Function Angle2Vecteurs(ByRef u() As Double, ByRef v() As Double) As Double
792          Dim temp As Double
793          temp = Outils_Math.Prod_scalaire(u, v) / norme(u) / norme(v)
# Line 788 | Line 798 | Module Outils_Math
798          End If
799      End Function
800  
801 +
802 +    ''' <summary>
803 +    ''' Compare 2 vecteur de dimension 3
804 +    ''' </summary>
805 +    ''' <param name="u">Premier Vecteur</param>
806 +    ''' <param name="v">Second vecteur</param>
807 +    ''' <returns>0 si sans rapport, 1 si identiques, 2 si sens inverse, 3 si même sens mais norme différente, 4 si norme et sens différent</returns>
808 +    ''' <remarks>Non optimisé pour les vecteurs unitaires</remarks>
809 +    Public Function ComparerVecteurs3D(ByRef u() As Double, ByRef v() As Double) As Byte
810 +
811 +        If u.GetUpperBound(0) <> 2 AndAlso v.GetUpperBound(0) <> 2 Then Return 0
812 +        If Math.Abs(u(0) - v(0)) < 0.0005 AndAlso Math.Abs(u(1) - v(1)) < 0.0005 AndAlso Math.Abs(u(1) - v(1)) < 0.0005 Then Return 1
813 +        If Math.Abs(u(0) + v(0)) < 0.0005 AndAlso Math.Abs(u(1) + v(1)) < 0.0005 AndAlso Math.Abs(u(1) + v(1)) < 0.0005 Then Return 2
814 +
815 +        Dim u2() As Double = unitaire(u)
816 +        Dim v2() As Double = unitaire(v)
817 +
818 +        If Math.Abs(u2(0) - v2(0)) < 0.0005 AndAlso Math.Abs(u2(1) - v2(1)) < 0.0005 AndAlso Math.Abs(u2(1) - v2(1)) < 0.0005 Then Return 3
819 +        If Math.Abs(u2(0) + v2(0)) < 0.0005 AndAlso Math.Abs(u2(1) + v2(1)) < 0.0005 AndAlso Math.Abs(u2(1) + v2(1)) < 0.0005 Then Return 4
820 +
821 +        Return 0
822 +
823 +    End Function
824 +
825 +    ''' <summary>
826 +    ''' Fonction qui inverse le sens d'un vecteur
827 +    ''' </summary>
828 +    ''' <param name="u">Le vecteur</param>
829 +    ''' <returns>Un vecteur de direction inverse</returns>
830 +    ''' <remarks></remarks>
831 +    Public Function InverserVecteur(ByRef u() As Double) As Double()
832 +        Dim v() As Double
833 +        ReDim v(u.GetUpperBound(0))
834 +
835 +        For i As Integer = 0 To u.GetUpperBound(0)
836 +            v(i) = -u(i)
837 +        Next
838 +        Return v
839 +    End Function
840 +
841 +
842 +
843   End Module

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines