locked
Fonction de calcul d'angle RRS feed

  • Question

  • Bonsoir,

    WinForm, VB et .NET 2.0

    J'ai besoin de calculer l'angle formé par l'intersection de deux segments de droites. Je dispose donc de trois points qui correspondent au point d'intersection et au sommet de chacun des deux segments.
    Il doit bien exister une bibliothèque pour calculer cela dans .NET, mais où chercher ? Apparemment pas dans Math... Et le Help de VS n'est guère performant...

    Merci de vos conseils

    Alain
    vendredi 5 février 2010 21:22

Réponses

  • Bonjour Achlog,

    Je ne crois pas qu'il existe une fonction qui, en lui passant 3 points, nous retourne un angle. Cela dit, vous pouvez utiliser les propriétés du triangle afin de determiner un angle à partir de ces 3 points en utilisant la loi des cosinus (théorème d'Al-Kashi).

    Cordialement,

    Mathieu
    Mathieu Francesch - MCTS/MCPD - Sharplog Engineering
    • Marqué comme réponse AchLog samedi 6 février 2010 09:21
    samedi 6 février 2010 07:13

Toutes les réponses

  • Bonjour Achlog,

    Je ne crois pas qu'il existe une fonction qui, en lui passant 3 points, nous retourne un angle. Cela dit, vous pouvez utiliser les propriétés du triangle afin de determiner un angle à partir de ces 3 points en utilisant la loi des cosinus (théorème d'Al-Kashi).

    Cordialement,

    Mathieu
    Mathieu Francesch - MCTS/MCPD - Sharplog Engineering
    • Marqué comme réponse AchLog samedi 6 février 2010 09:21
    samedi 6 février 2010 07:13
  • Merci Mathieu pour cette indication.
    Dommage que cette fonction n'existe pas, je vais devoir faire des calculs...

    Alain
    samedi 6 février 2010 09:23
  • En définitive, voici la fonction que j'utilise, elle peut, peut-être, intéresser quelqu'un :

     
        Private Function Angle(ByVal p As PointF) As Double
            Dim x, y, radians As Double
    
            x = p.X - centre.X
            y = centre.Y - p.Y
            radians = Math.Atan2(y, x)
            Return radians * (180 / Math.PI)
    
        End Function
    
    Elle retourne l'angle exprimé en degrés, formé par un axe horizontal et un segment de droite d'extrémité p, qui le coupe au centre.



    Alain
    samedi 6 février 2010 17:26
  • Bonjour Alain,

    Je vous communique le code en utilisant la loi des cosinus :

        Public Function DistanceBetweenTwoPoints(ByVal p1 As Point, ByVal p2 As Point) As Single
            Return Math.Sqrt((Math.Abs(p2.X - p1.X) ^ 2) + (Math.Abs(p2.Y - p1.Y) ^ 2))
        End Function
    
        Public Function CalculateAngle(ByVal a As Point, ByVal b As Point, ByVal c As Point) As Double
            Dim ab, bc, ac, cosB As Double
            ab = DistanceBetweenTwoPoints(a, b)
            bc = DistanceBetweenTwoPoints(b, c)
            ac = DistanceBetweenTwoPoints(a, c)
            cosB = Math.Pow(ac, 2) - Math.Pow(ab, 2) - Math.Pow(bc, 2)
            cosB = cosB / (2 * ab * bc)
            Return 180 - (Math.Acos(cosB) * 180 / Math.PI)
        End Function

    La première fonction vous permet de calculer la distance entre 2 points et la seconde de calculer un angle avec 3 points.

    Cordialement,

    Mathieu
    Mathieu Francesch - MCTS/MCPD - Sharplog Engineering
    samedi 6 février 2010 18:29
  • Merci beaucoup Mathieu. En effet, la fonction CalculeAngle met en oeuvre le théorème de Al-Kashi.

    Bien cordialement
    Alain
    samedi 6 février 2010 23:19