Bonjour,
J'essaye depuis quelque jours de réaliser la contraction d'un polygone qui peut être concave, mais ne présente pas de trous et n'est pas croisé. La contraction comme je l'entend fait que si on prend le projeté orthogonal de n'importe quelle point du périmètre du nouveau polygone sur l'ancien polygone, on a une distance d'au moins shift (i).
J'ai pensé à plusieurs solutions, dont une est la réduction (dans le sens géométrique, réduction des dimensions) du polygone, en déterminant le centroïde et en réduisant la distance centroïde-sommet sur chaque point de manière proportionnelle (la proportion étant calculée préalablement telle qu'on respecte (i).
Malheureusement, cette solution ne semble marcher que sur des polygones convexes, avec comme contre-exemple si deux points sont dans le même axe par rapport au centroïde, il n'y aura pas "contraction" du segment reliant ces deux points.
Une autre solution possible est de procéder segment par segment, en translatant les deux points par un vecteur d'angle perpendiculaire à celui du segment et de module shift. Seulement je ne vois pas comment déterminer l'angle + ou - 90° tel que le nouveau segment soit vers l'intérieur du polygone. Il faut aussi penser à faire l'intersection des deux points ainsi créés pour un sommet du polygone initial.
Je suis un peu bloqué sur la direction à prendre et compte sur tout point de vue nouveau sur le sujet :-)
(Si vous ne comprenez pas certaines de mes explications, n'hésitez pas non plus à demander je suis pas forcément très clair).
Edit : ah bah j'avais point vu, on parle de l'exterieur juste en dessous. Suffit que je sache dans quel sens mon polygone tourne et la solution est ici
Maintenant il faudrait savoir si l'intersection est facile à faire et si la solution est optimale.Subject 2.07: How do I find the orientation of a simple polygon?
Compute the signed area (Subject 2.01). The orientation is counter-clockwise if this area is positive.
Partager