Bonjour,
Je planche sur un problème de géométrie dans le cas d'une problématique industrielle (réelle).
Nous avons un tracé (contour fermé) à réaliser, ce tracé est modélisé par un ensemble de points, qui au final forment un polygone.
Dans le cadre d'une adaptation de ce tracé, je dois décaller l'ensemble à l'intérieur du polygone père, d'une distance x par rapport à chaque côté, prenons ici 1cm pour l'exemple.
J'ai déjà pas mal avancé sur la conception de l'algorithme, et je voudrais savoir si ma logique est bonne, ou si vous avez des solutions plus simples car cela me parait quand même être une usine à gaz...
J'obtiens mes points dans un tableau on ne peut plus normal avec des coordonnées par rapport à l'origine. Je parcours le tracé dans l'ordre où il m'arrive.
Tout d'abord, la fonction de décalage:
Pour chaque segment, connaissant le point de début et de fin, je peux le modéliser par une fonction affine (avec un traitement spécifique dans le cas où on est avec une droite parallèle à l'un des axes) en définissant correctement les bornes d'utilisation tout est correct. Ayant alors une équation cartésienne, je cherche à décaler ma droite d'une distance de 1cm ici.
Pour cela, je calcule le plus simple vecteur normal à ma droite, puis je le redimensionne pour qu'il ai une norme de 1. Ayant ses coordonnées, je peux calculer l'équation de ma nouvelle droite décalée: Droite d'origine -> Vecteur normal -> Vecteur normal de norme 1 -> Droite décalée.
Je souhaite faire cela avec l'ensemble de mes segments du polygone. A la fin je n'aurai qu'a résoudre les équations des nouvelles droites, ce qui me donne l'endroit où elles se coupent, pour avoir la position de mes nouveaux points donc du polygone incrusté. (PJ, rouge polygone incrusté, bleu portions des droites décalées)
On pourrait s'arrêter là, mais cela serait trop simple. En effet, pour chaque segment, on peut placer le nouveau segment décalé soit à sa droite, soit à sa gauche. Pour déterminer pour le segment courant dans quelle direction doit on se décaler, je souhaite utiliser le produit scalaire. Je détermine le vecteur associé à mes 2 points constituant le segment courant, et je fais de même avec le segment le précédent, ainsi en appliquant le produit scalaire, je peux déterminer l'angle formé entre ces 2 segments (Par exemple pour AB je regarde AB et AH). La le tour est simple, s'il est inférieur à 180° degrés je place mon décalage à droite, sinon à gauche.
Mon problème est que j'ai depuis toujours un problème avec les angles, je sais que mon logiciel travaille en radians, et que dans ce cas on compte positivement dans le sens anti-horaire (trigo). Je pense donc qu'il faut que je fasse attention aux signes dans mon interprétation des résultats.
Deuxièmement, j'ai peur que ma méthode avec le produit scalaire ne donne pas les résultats que j'espère.
Si on regarde en pièce jointe le cas pour le segment DE, où on calcule l'angle D (et de manière générale, ce sera la même chose partout où on tourne à gauche), ma règle ne fonctionne plus.
AveZ vous une idée sur comment déterminer la direction gauche/droite de décalage à partir des éléments donnés?
Si vous avez d'autres idées je suis aussi preneur, un redimensionnement via une homotéthie me parait trop complexe, et je n'ai pas d'autres idées.
Merci
Partager