2017-08-13 1 views
1

Je travaille sur une petite application avec la librairie P5 qui permet à un utilisateur de cliquer sur une toile pour créer des points et construire un polygone et je veux calculer le graphe de visibilité de ce polygone . Comment puis-je implémenter un algorithme qui peut me dire si 2 sommets sont visibles dans ce polygone? Je ne sais pas comment vérifier si une ligne entre ces 2 sommets est à l'intérieur du polygone. merci.Visibilité de 2 sommets dans un simple polygone

+0

Connexes: https://stackoverflow.com/q/5223909/266535 – styfle

+0

Connexes: https://stackoverflow.com/q/1119627/266535 – styfle

Répondre

0

Laissez un et b être deux sommets. Vérifiez d'abord que le segment ab est localement à l'intérieur à un, et au b. C'est-à-dire qu'il tombe dans le cône déterminé par les sommets avant et après un, et b. Si oui, alors vous devez couper le segment ab avec chaque bord du polygone (sauf ceux qui concernent un et b, parce que vous venez de les vérifier).

Pour cela, vous avez besoin d'un code d'intersection de segment de segment. Vous pouvez trouver ceci partout sur le Web, y compris dans le chapitre 7 de Computational Geometry in C, et this description by Martin Thoma.

+0

Nous vous remercions de votre réponse. Avez-vous un lien qui pourrait m'aider à implémenter la partie où j'ai besoin de déterminer si le segment est localement à l'intérieur de a et b. J'ai un problème dans le cas où l'angle formé par les sommets incidents est obtus. – user1241025

+0

Vous voulez un sommet à gauche de * ab * et un sommet à droite. Donc, il peut être vérifié avec deux appels à une fonction LeftOf() qui prend trois points en entrée et renvoie vrai si le premier pt est à gauche de la ligne déterminée par les 2e et 3e. C'est essentiellement la [zone signée d'un triangle] (http://mathworld.wolfram.com/TriangleArea.html). –

+0

Nous vous remercions de votre aide. – user1241025