Calculer un angle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 290 fois - Téléchargée 18 fois

Contenu du snippet

calcule un angle en degrés (0->360) en sachant que le haut est à 0° et sens des aiguilles.

'renvoi une décimale avec virgule à double précision

Source / Exemple :


Function angle(ByVal origine_x As Integer, ByVal origine_y As Integer, ByVal destination_x As Integer, ByVal destination_y As Integer)
    Dim left As Integer = destination_x - origine_x
    Dim top As Integer = destination_y - origine_y
    Dim anglep As double
    If Math.Sqrt(top ^ 2 + left ^ 2) = 0 Then Exit Function
    Select Case top
      Case Is >= 0
        anglep = Math.Atan(left / top) - Math.PI
      Case Is < 0
        anglep = Math.Atan(left / top)
    End Select
    If anglep < 0 Then anglep = anglep + 2 * Math.PI
    anglep = 360 - (180 * anglep / Math.PI)
    'O en haut, sens de la montre
    Return anglep
  End Function

A voir également

Ajouter un commentaire Commentaires
Messages postés
26
Date d'inscription
dimanche 27 janvier 2008
Statut
Contributeur
Dernière intervention
7 juillet 2019

Bonjour,
J'ai décidé de partir du haut et de choisir le sens horlogique, car ayant des connaissances mathématiques assez limitées c'était le seul choix qui m'est venu à l'esprit. Pour la possilibité de conversion en radian c'est une bonne idée.
Merci pour vos idées
Messages postés
14
Date d'inscription
mercredi 24 octobre 2007
Statut
Membre
Dernière intervention
29 novembre 2010

pour obtenir la bijection sauf pour l'axe des x;x<0 en maths, on utilise 2atan(y/(x+sqrt(x²+y²)). Ca permet d'éviter de distinguer deux cas. Je te conseille également de calculer les angles à partir de l'axe des x;x>0.
Messages postés
11
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
14 février 2012

Bonjour michael59330,
Bel exercice de style. Mais n'étant pas un pro de la programmation, je ne m'étendrai pas sur la qualité du code que tu as écrit.

Juste deux petites remarques :
- pourquoi ne pas avoir traité ces angles dans le sens trigonométrique, c'est-à-dire dans le sens anti-horlogique et en partant de l'est (à droite) ?
- Et une possibilité de conversion en radians ?

Bonne continuation.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
31
Plus utile sur codyx.
Un parametre pour l'angle de rotation pourrait être intéressant.
Des points en entrée pourrait aussi être intéressant.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
* Source .NET, merci de l'indiquer
* Les lignes 13 et 15 peuvent être assemblées
* Pas besoin de Select Case mais seulement besoin d'un If...Else

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.