[Geometrie] Atan2 et ses limites
Bonjour,
Je me trouve face a un probleme qui je suis certain a deja ete resolu de nombreuses fois.. mais moi je bloque et je n'ai pas non plus trouve de solution sur le net. voici mon problem :
J'ai des points qui appartiennent a un polygon. Ces points ont des coordonnees qui peuvent etre positives comme negatives. Et j'ai un point situe n'importe ou dans l'espace 2D a l'exterieur du polygon.
J'ai donc utiliser la fonction atan2 pour trouver mes angles. Je l'utilise comme indiquee dans l'aide :
Soit deux point A(xa,ya) et B(xb,yb) si je veux obtenir l'angle je fais :
atan2(yb-ya,xb-xa) ... ici premier probleme :
Prenons les points A(1,1), C(3,1), M(1,0) et enfin O(0,0)
si l'on calcul atan2 de la facon suivante :
atan2(O(2)-A(2),O(1)-A(1))*180/pi = -135
atan2(O(2)-B(2),O(1)-B(1))*180/pi = -135 (normal)
atan2(O(2)-C(2),O(1)-C(1))*180/pi = -161.5651 (normal)
atan2(O(2)-M(2),O(1)-M(1))*180/pi = 180 (comprends pas)
Et puis je me suis retrouver face au fait que atan2 ne calcul pas les angles au dessus de 180 degree, donc comment faire ?
J'ai aussi tente l'utilisation du produit scalaire :
Code:
1 2 3 4 5 6 7 8 9 10
| double calcAngle(double p1_x, double p1_y, double p2_x, double p2_y)
{
double a_x = p2_x - p1_x;
double a_y = p2_y - p1_y;
double b_x = 1.0;
double b_y = 0.0;
return acos((a_x*b_x+a_y*b_y)/sqrt(a_x*a_x+a_y*a_y));
} |
Mais meme probleme...
Une idee ? Merci d'avance ! Je precise que je calcule les angles car je souhaite classer les points suivant cet angle.
P.S : j'ai poste ici parce que je ne voyais pas ou je pouvais poser une question disons plus general, et egalement parce que je code en C++ ?