Angle à partir de coordonnées

cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005 - 3 févr. 2004 à 18:13
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 - 2 mars 2004 à 15:53
Bonjour à tous,

J'aimerais savoir comment on déduit, à partir des coordonnées d'un point alpha, l'angle formé entre la demi-droit orignie-alpha et un des axes du repère.

13 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
3 févr. 2004 à 18:29
Je pense que tu devrais poser cette question sur un forum de math plutôt qu'ici, tu aurais plus de chance d'avoir une réponse !

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
3 févr. 2004 à 18:30
Tu calcules la distance (=D) de l'origine(O) à ton point (A)

D = sqr(Xa^2+Ya^2) ou Xa et Ya sont les coord de ton point A

Tu calcules le cosinus (=C) et le sinus (=S) de l'angle formé avec l'axes des XC Xa/D et S Ya/D

Tu calcule l'angle (=Angle)a partir du cosinus C
Angle = Atn(-C / Sqr(-C * C + 1)) + 2 * Atn(1)
Si le Sinus (=S) est negatif ton angle vaut -Angle sinon il vaut Angle.
Tu as ici ton angle en radian, il faudra peut-etre le convertir en degré par AngleDegre = (AngleRadian / PI)*180

Christophe R.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
3 févr. 2004 à 18:34
A noter que cette méthode plante si le point A est sur l'axe des Y car son cosinus vaut alors zéro et le calcul de l'arccosinus tente une division par zéro.
Il faut juste faire un test avant de calculer cet arccosinus et si C=0, alors Angle = 90 sinon utiliser la formule Angle = Atn(....)
Et faire ensuite le test sur le signe du sinus

Christophe R.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
3 févr. 2004 à 18:34
... Mais comme le disait Dark Sidious, c'est de la trigonometrie pure et dure, pas de la programmation.

Christophe R.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005
3 févr. 2004 à 18:45
Merci pour cette réponse !
Certes, il s'agit de maths, mais pour moi la programmation est la seule chose qui me fasse utilise des maths, c'est indiscociable pour moi. Bon et puis y'a une rubrique "Maths" dans le formum, faut bien qu'elle serve un peu ! :)

Par curiosité, ce serait quoi la méthode avec l'arctagente ?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
3 févr. 2004 à 18:52
La fonction VB permettant de calculer l'arctangente est Atn().

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005
3 févr. 2004 à 19:04
Certes, mais ce que je voulais dire c'est comment déduire un angle en utlisant cette méthode de l'arctangente....
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
3 févr. 2004 à 21:18
Salut
d'après les réponses reçues que tu ne contestes pas, je suppose qu'on est en géométrie plane. Le repère est évidemment orthonormé pour pouvoir parler d'angle.
Alors, essayons de faire simple :

Si le point A a pour coordonnées (Xa, Ya) dans un repère d'origine O et si Angle désigne l'angle formé par l'axe des abscisses et la demi-droite [OA),

Angle (en radians) = Atn(Ya / Xa) ou bien
Angle (en degrés) = (Atn(Ya / Xa))*180/Pi
avec bien sûr Pi = 4 * Atn(1)
0
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
5 févr. 2004 à 22:28
à rene38 : la question demandait une réponse qui fonctionne, et non pas un étalage de pseudo-connaissances mathématiques ! On pourrait très bien être en géométrie non euclidienne (riemannienne) et introduire une notion d'angle par le choix d'une norme et d'un produit scalaire, sans repère orthonormé, mais là n'est pas la question ! :)

Sans déconner : le code de rene ne peut pas marcher, car :
1) il plante si Xa = 0
2) il retourne que des valeurs entre -Pi/2 et Pi/2 (définition de Atn)

Bref, le code de creneau est bcp mieux. Sinon, je te propose un autre code qui marche bien, et qui vérifie toutes les conditions :

private function Angle( _
   byval X as single,byval Y as single) as single
dim Pi as single, Angle as single

Pi = 4*Atn(1) 
if Sqr(X^2+Y^2) = 0 then exit function

if X = 0 then
  Angle = sgn(Y) * Pi / 2
elseif X < 0 then
  Angle = Pi - Atn(-Y/X)
else
  Angle = Atn(Y/X)
end if

end function


Puis tu fais ce que tu veux avec ton angle (tu le convertis en degré, de le place entre 0 et 360°, ...)
Voilà, vivent les mathématiques !!

VB Lover
0
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
11 févr. 2004 à 21:16
errata :

il faut bien sûr enlever dim Angle as single ...

sinon, pour avoir un angle en degré entre 0 et 360, il suffit de faire comme ça :

Private Function Angle( _
   ByVal X As Single, ByVal Y As Single) As Single
Dim Pi As Single, Resultat As Single

Pi = 4 * Atn(1)
If Sqr(X ^ 2 + Y ^ 2) = 0 Then Exit Function

If X = 0 Then
    Resultat = Sgn(Y) * Pi / 2
ElseIf X < 0 Then
    Resultat = Pi - Atn(-Y / X)
Else
    Resultat = Atn(Y / X)
End If

If Resultat < 0 Then
    Resultat = Resultat + 2 * Pi
End If

Angle = Resultat * 180 / Pi
    
End Function



VB Lover
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
12 févr. 2004 à 01:08
VB Lover puisque tu as mis errata (au pluriel)

1) If Sqr(X ^ 2 + Y ^ 2) = 0 Then :
on peut peut-être se contenter de If X ^ 2 + Y ^ 2 = 0 Then

2) Resultat = Pi - Atn(-Y / X)
pourquoi pas Resultat = Pi + Atn(Y / X) ?

3) La variable intermédiaire Resultat n'est peut-être pas utile

4) La fonction ne modifiant ni X ni Y on peut les passer ByRef

Résumons :

Private Function Angle(X As Single, Y As Single) As Single
Dim Pi As Single
Pi = 4 * Atn(1)
If X ^ 2 + Y ^ 2 = 0 Then 
   MsgBox ".." ' expliquant pourquoi la fonction ne renvoie rien
   Exit Function
End If
If X = 0 Then
   Angle = Sgn(Y) * Pi / 2
Else
   Angle = Atn(Y / X)
End If
If X < 0 Then Angle = Pi + Angle
If Angle < 0 Then Angle = Angle + 2 * Pi
Angle = Angle * 180 / Pi
End Function


Terminons par un peu de conjugaison:

Tu taquines, je taquine, nous taquinons ...
0
PijanaKrava Messages postés 26 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 23 décembre 2004
2 mars 2004 à 14:58
yop tt le monde

euh moi g un chti problème du même genre sauf qu'il sagit de l'angle entre 3 points dont j'ai les coord
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
2 mars 2004 à 15:53
Bonjour

A, B, S étant les trois points, de coordonnées
A(xA, yA) B(xB, yB) S(xS, yS)
pour calculer l'angle ASB,
1. Tu fais un changement d'origine en prenant S comme nouvelle origine
Les 3 points ont alors comme nouvelles coordonnées :
S(0, 0) A(xA - xS, yA - yS) B(xB - xS, yB - yS)

2. Tu calcules par la méthode indiquée ci-dessus :
l'angle 1 formé par la demi-droite [SB) et l'axe des abscisses
l'angle 2 formé par la demi-droite [SA) et l'axe des abscisses

et il reste à faire la soustraction angle 1 - angle 2

Private Function Angle(xA As Single, yA As Single, xB As Single, yB As Single, xS As Single, yS As Single) As Single
Dim Pi As Single, Angle1 As Single, Angle2 As Single
Pi = 4 * Atn(1)If (xA xS And yA yS) Or (xB = xS And yB = yS)  Then 
   MsgBox ".." ' expliquant pourquoi la fonction ne renvoie rien
   Exit Function
End If
'Calcul de l'angle 2
If xA = xS Then
   Angle2 = Sgn(yA - yS) * Pi / 2
Else
   Angle2 = Atn((yA - yS) / (xA - xS))
End If
If xA - xS < 0 Then Angle2 = Pi + Angle2
If Angle2 < 0 Then Angle2 = Angle2 + 2 * Pi
Angle2 = Angle2 * 180 / Pi

'Calcul de l'angle 1
If xB = xS Then
   Angle1 = Sgn(yB - yS) * Pi / 2
Else
   Angle1 = Atn((yB - yS) / (xB - xS))
End If
If xB - xS < 0 Then Angle1 = Pi + Angle1
If Angle1 < 0 Then Angle1 = Angle1 + 2 * Pi
Angle1 = Angle1 * 180 / Pi

'Calcul de l'angle ASB
Angle = Angle1 - Angle2
If Angle < 0 Then Angle = Angle + 360
End Function
0
Rejoignez-nous