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.

1
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.

1
2
3
4
5
6
7
8
<strong>Si </strong>Vecteur.x &gt; 0 <strong>et</strong> Vecteur.y == 0<strong> Alors</strong>
Sens positif horizontal;
<strong>Si </strong>Vecteur.y &gt; 0<strong> Alors</strong>
Sens positif;
<strong>Si </strong>Vecteur.x &lt; 0 <strong>et</strong> Vecteur.y == 0<strong> Alors</strong>
Sens négatif horizontal;
<strong>Si </strong>Vecteur.y &lt; 0<strong> Alors</strong>
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.

Timidouveg
A propos

Je me présente sur Internet sous les noms Timidouveg et Audrey Skye. Depuis le vendredi 2 septembre 2016, je préfère qu'on me genre au féminin car je suis une personne transgenre non-binaire féminine :) Mes activités se regroupent tous dans la qualité d'artiste, principalement numérique. Je suis à la fois développeuse de jeux-vidéo, vidéaste sur la plateforme Youtube, dessinatrice traditionnelle et militante vegan/féministe/etc... sur les réseaux sociaux. Je suis porteuse d'un handicap invisible qui perturbe mes projets, mais je fais avec et c'est pourquoi vous pouvez qu'en-même découvrir ce blog, mes jeux et ma chaîne Youtube :) J'ai un rythme plus lent que ce qu'on pourrait attendre dans ce monde prit de frénésie. C'est totalement assumé, même si il m'a fallu du temps pour ça :D Je crois avoir dit l'essentiel. Bonne découverte :)

Laisser un commentaire

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

*