Calculer le sens d’un segment

Sens segments 1Dans ma reproduction du moteur Build de Ken Silverman pour mon musée virtuel, j’ai eu besoin de déterminer le sens d’un segment. Je définis le sens du segment par est-ce que le segment va du point A au point B, ou du point B au point A. L’intérêt de savoir cela permet, dans mon moteur, de décider où se trouve l’intérieur et l’extérieur d’un polygone qui définit un secteur du musée. Lorsqu’on dessine un secteur, on ne fait pas toujours attention à l’ordre dans lequel on place les points qui le compose. Pour donner un exemple de l’intérêt de respecter l’ordre des points, dans OpenGL, placer les points dans un sens détermine la recto ou le verso d’un polygone, ce qui permet entre autres d’afficher l’un ou l’autre ou les deux. Dans mon moteur, en dessinant un secteur, si on se trompe dans l’ordre des points, l’intérieur ou l’extérieur seront inversés.

Comment faire simplement une détermination automatique du sens d’un segment pour ne pas avoir à le faire nous-même lors du dessin ? J’ai choisis d’utiliser les signes des coordonnées. D’abord, le moteur calcul un vecteur à partir des deux points du segment dans l’ordre dans lesquelles elles ont été dessinés. Ce dernier se calcule par l’équation suivante.

Vecteur = (xB - xA , yB - yA)

Une fois le vecteur correspondant au sens du segment, il suffit donc de regarder le signe des coordonnées. J’ai choisis d’indiquer le sens par négatif ou positif. Et je mets un dessin pour comprendre ce que ça donne pour toutes sortes de vecteurs sur 360°. Les sens sont déterminés de sorte à correspondre au cercle trigonométrique inversé dans l’axe Y en raison du fait que la plus part des repères graphiques sur ordinateur part du haut vers le bas et de gauche à droite. Ainsi le négatif est en haut pour les Y et le positif en bas.

Si Vecteur.x > 0 et Vecteur.y == 0 Alors
Sens positif horizontal;
Si Vecteur.y > 0 Alors
Sens positif;
Si Vecteur.x < 0 et Vecteur.y == 0 Alors
Sens négatif horizontal;
Si Vecteur.y < 0 Alors
Sens négatif;

Dans un autre article j’utiliserais ce petit système et vous expliquerais comment le moteur décide de l’ordre pour lire les points du dessin fraîchement réalisés par vous ou moi dans l’éditeur 🙂 Grâce à ça, et à l’aide d’une autre donnée, les secteurs et les ajouts aux secteurs sont créés de manière cohérentes.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *