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 40 by bournival, Mon Aug 20 21:30:28 2007 UTC vs.
Revision 205 by bournival, Thu Jul 23 20:53:57 2009 UTC

# Line 1 | Line 1
1 + Imports System.Math
2 +
3   Module Outils_Math
4  
5  
# Line 532 | Line 534 | Module Outils_Math
534  
535          trapezes = aire
536      End Function
537 +
538 +
539 +
540      Function IntegrationGauss(ByRef n As Integer, Optional ByRef noFunction As Integer = 1) As Double
541          Dim i As Integer
542          Dim temp As Double
# Line 751 | Line 756 | Module Outils_Math
756      ' function qui effectue la rotation d'un point Pt par le vecteur UNITAIRE u
757      Public Function Rotation2D(ByRef u() As Double, ByVal Pt() As Double) As Double()
758          Dim temp(1) As Double
759 <        Dim longueur As Double = Math.Sqrt(u(0) * u(0) + u(1) * u(1))
760 <        u(0) /= longueur
761 <        u(1) /= longueur
759 >        'Dim longueur As Double = Math.Sqrt(u(0) * u(0) + u(1) * u(1))
760 >        'u(0) /= longueur
761 >        'u(1) /= longueur
762 >
763 >        Dim test(2) As Double
764 >        test(0) = 1
765 >        'Debug.Print(Outils_Math.Angle2Vecteurs(test, u))
766 >        'Debug.Print(Outils_Math.Angle2Vecteurs(test, Pt))
767 >
768 >        'temp(0) = u(0) * Pt(0) - u(1) * Pt(1)
769 >        'temp(1) = u(1) * Pt(0) + u(0) * Pt(1)
770 >
771 >        'Debug.Print(Outils_Math.Angle2Vecteurs(test, temp))
772 >
773 >        Dim u2(2) As Double
774 >        u2(0) = u(0)
775 >        u2(1) = u(1)
776 >        Dim angleInit As Double = Math.Atan2(u(1), u(0))
777 >        Dim anglePt As Double = Math.Atan2(Pt(1), Pt(0))
778 >        Dim longueur As Double = Math.Sqrt(Pt(0) * Pt(0) + Pt(1) * Pt(1))
779 >
780 >        Dim anglefinal As Double = anglePt + angleInit
781 >        temp(0) = Math.Cos(anglefinal) * longueur
782 >        temp(1) = Math.Sin(anglefinal) * longueur
783  
784 <        temp(0) = u(0) * Pt(0) - u(1) * Pt(1)
759 <        temp(1) = u(1) * Pt(0) + u(0) * Pt(1)
784 >        Return temp
785  
786 +    End Function
787  
788  
789 <        Return temp
789 >    'Private Function Angle2D(ByRef u() As Double) As Double
790 >    '    If Math.Sign(u(0)) = 1 AndAlso Math.Sign(u(1)) = 1 Then
791 >    '        Return (Math.Atan(u(1) / u(0)))
792 >    '    ElseIf Math.Sign(u(0)) = -1 AndAlso Math.Sign(u(1)) = 1 Then ' 2nd quadrant
793 >    '        Return (Math.Atan(u(1) / u(0)))
794 >    '    ElseIf Math.Sign(u(0)) = -1 AndAlso Math.Sign(u(1)) = 1 Then ' 3ieme quadrant
795 >    '        Return (Math.Atan(u(1) / u(0))) + 2 * Math.PI
796 >    '    Else
797 >    '        Return (Math.Atan(u(1) / u(0))) + 2 * Math.PI
798 >    '        math.
799 >    '    End If
800 >    'End Function
801  
765    End Function
802  
803      Public Sub Rotation2D(ByRef u() As Double, ByRef Ptx As Double, ByRef Pty As Double)
804          Dim temp(1) As Double
# Line 778 | Line 814 | Module Outils_Math
814  
815      End Sub
816  
817 +
818 +    ''' <summary>
819 +    ''' Retourne l'angle entre 2 vecteurs
820 +    ''' </summary>
821 +    ''' <param name="u">Le premier vecteur</param>
822 +    ''' <param name="v">Le second vecteur</param>
823 +    ''' <returns>Un angle en radian</returns>
824 +    ''' <remarks>Retourne Pi si les 2 vecteurs sont d'orientation identique mais de direction opposés</remarks>
825      Public Function Angle2Vecteurs(ByRef u() As Double, ByRef v() As Double) As Double
826          Dim temp As Double
827          temp = Outils_Math.Prod_scalaire(u, v) / norme(u) / norme(v)
# Line 788 | Line 832 | Module Outils_Math
832          End If
833      End Function
834  
835 +
836 +    ''' <summary>
837 +    ''' Compare 2 vecteur de dimension 3
838 +    ''' </summary>
839 +    ''' <param name="u">Premier Vecteur</param>
840 +    ''' <param name="v">Second vecteur</param>
841 +    ''' <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>
842 +    ''' <remarks>Non optimisé pour les vecteurs unitaires</remarks>
843 +    Public Function ComparerVecteurs3D(ByRef u() As Double, ByRef v() As Double) As Byte
844 +
845 +        If u.GetUpperBound(0) <> 2 AndAlso v.GetUpperBound(0) <> 2 Then Return 0
846 +        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
847 +        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
848 +
849 +        Dim u2() As Double = unitaire(u)
850 +        Dim v2() As Double = unitaire(v)
851 +
852 +        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
853 +        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
854 +
855 +        Return 0
856 +
857 +    End Function
858 +
859 +    ''' <summary>
860 +    ''' Fonction qui inverse le sens d'un vecteur
861 +    ''' </summary>
862 +    ''' <param name="u">Le vecteur</param>
863 +    ''' <returns>Un vecteur de direction inverse</returns>
864 +    ''' <remarks></remarks>
865 +    Public Function InverserVecteur(ByRef u() As Double) As Double()
866 +        Dim v() As Double
867 +        ReDim v(u.GetUpperBound(0))
868 +
869 +        For i As Integer = 0 To u.GetUpperBound(0)
870 +            v(i) = -u(i)
871 +        Next
872 +        Return v
873 +    End Function
874 +
875 +
876 +
877   End Module

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines