Transformer un vecteur normalisé en angle

Fermé
Albo - 1 déc. 2013 à 13:59
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 1 déc. 2013 à 16:23
Bonjour à tous !
Je développe actuellement un petit programme.
Et je ne dispose pas de la formule permettant de transformer un vecteur normalisé en angle.

Par exemple, si mon axe X vaut -1 et mon axe Y vaut 0, l'angle de sortie vaut 0°.
Idem avec les couples suivants :
f([0,-1]) = 90°
f([1,0]) = 180°
f([0,1]) = 270°

Connaissez-vous la formule ? Pouvez-vous me l'expliquer avec un calcul très simple ?
Pas de formule mathématique avec des symboles, phi ou theta etc. Please .... :)

Merci d'avance.

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 déc. 2013 à 14:34
"Pas de formule mathématique avec des symboles, phi ou theta etc."
Quelle différence cela fait ? Ce ne sont que des lettres... sauf qu'en mathématiques on a des conventions, alors de même que tu ne vas pas remplacer (x,y) par (g,h), je ne vois pas pourquoi tu voudrais remplacer, pi, rho ou thêta, par autre chose...

Sinon je ne suis pas d'accord avec tes exemples. On devrait avoir :
f(1,0)=0°, f(0,1)=90°, f(-1,0)=180°, f(0,-1)=270°
Tu trouveras la formule dans Conversion entre système polaire et cartésien
2
Merci pour ta réponse !

" Sinon je ne suis pas d'accord avec tes exemples. On devrait avoir :
f(1,0)=0°, f(0,1)=90°, f(-1,0)=180°, f(0,-1)=270° "

Tout dépend de ce que tu souhaites faire.
Mon angle 0° part de la gauche de mon cercle et tourne dans le sens des aiguilles d'une montre. D'autre part le plan démarre du coin en haut à gauche, ce qui explique l'inversion des pôles sur l'axe y.

EDIT :

J'ai presque trouvé la solution. Mais ça plante pour f(-1,0)=180°.

void setup () {
float x=-1;
float y=0;
float radian=2*atan(y/(x+sqrt(pow(x,2)+pow(y,2))));
println(radian*(180/PI));
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 déc. 2013 à 16:15
"J'ai testé les calculs mathématique et je me retrouve avec des valeurs qui n'ont aucun sens pour moi."
Tu te retrouves probablement avec des valeurs en radians, c'est à dire qu'au lieu d'avoir 90° tu vas obtenir π/2=1.57, pour 180° π=3.14, etc. Il suffit de faire la conversion si tu les veux en degrés.

"Une formule toute simple f([x,y]) = angle, serait préférable pour ma logique."
Le problème c'est qu'il y a des cas particuliers, et que la trigonométrie ce n'est jamais simple...

La formule la plus directe c'est f(x,y) = 2*arctan(y / (x + √(x²+y²)))
Cependant si tes vecteurs sont effectivement normés, alors x²+y² vaut toujours 1 ce qui donne :

f(x,y) = 2*arctan(y / (x + 1))
Le cas particulier pour cette formule c'est que tu dois avoir x différent de -1 (à cause de la division)

De plus là je te donne la formule sur le cercle trigonométrique, c'est à dire avec le 0 à droite, dans le sens inverse des aiguilles d'une montre. Maintenant si on se place dans ton cas particulier avec le zéro à gauche et dans le sens des aiguilles d'une montre alors il faut faire π-f(x,y) ce qui nous arrange vu que les résultats obtenus étaient entre -π et π et que maintenant ils seront donc toujours positifs.

f(x,y) = π - 2*arctan(y / (x + 1))
Il ne reste plus qu'à faire la conversion en degrés :

f(x,y) = 180 - 360*arctan(y/(x + 1))/π
Rappel : on ne peux pas utiliser cette formule si x = -1
0
Merci beaucoup ! :)

Bon en faite j'ai trouvé la formule sur un site de mathématique.
http://integraledesmaths.free.fr/idm/PagePrincipale.htm#http://integraledesmaths.free.fr/idm/GeoAPPasCooCarPol.htm

Mais le x = -1 est embêtant. Comment peut-on faire ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 déc. 2013 à 16:23
Tu le gères à part, tu n'as pas le choix.
0