1 |
+ |
Imports System.Math |
2 |
+ |
|
3 |
|
Module Outils_Math |
4 |
|
|
5 |
|
|
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) |
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 |