Salut à tous
Je suis entrain d'écrire une petite fonction qui doit être capable, à partir d'une rue (objet PolyLigne : plusieurs segments coller les uns aux autres), de créer une projection de cette rue 30 mètre plus loin à droite ou à gauche.
Pour cela je calcule l'angle entre deux segments de la rue (pour savoir si je joins les points entre eux ou si je créer une intersection, je vous explique pas trop mais c'est pas pour le fun !). Seulement, suivant que je suis à droite ou à gauche des segments, l'angle n'est pas le même mais la somme des deux est 2PI. Dans ma fonction, je sais si je suis à droite ou a gauche mais il me faudrait reporter cette information pour le calcul de l'angle, en fait il faudrait que je détecte si l'angle est à gauche ou a droite (par rapport aux segments que je traite). Je vous ai joint une petite image pour mieux vous représenter le problème !
Le calcul de l'angle entre 3 points (donc 2 segments), pour le moment se fait comme cela (c'est du C# mais très simple a comprendre) :
Si quelqu'un connait une formule qui me permettrait de corriger ce calcul et donc pour calculer l'angle à droite ou à gauche de la rue, ca me dépannerait beaucoup !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public static Double Angle(Point p1, Point p2, Point p3) { Double alpha = Math.Atan2(p1.Y - p2.Y, p1.X - p2.X); Double beta = Math.Atan2(p3.Y - p2.Y, p3.X - p2.X); Double angle = (beta - alpha); //Correction de l'angle pour le resituer entre 0 et 2PI while (angle < 0.0 || angle > 2 * Math.PI) { if (angle < 0.0) angle += 2 * Math.PI; else if (angle > 2 * Math.PI) angle -= 2 * Math.PI; } return angle; }
Merci de votre lecture et de vos réponses !
@ très bientôt
Antoine
Partager