2011-10-27 2 views
7

J'ai des polygones définis avec leurs sommets, et j'ai besoin de calculer les aires de leur union et intersection. La chose la plus bouleversante est qu'elle est implémentée dans Mapping Toolbox, mais je ne peux pas l'acheter. Est-ce que quelqu'un sait comment faire un algorithme rapide pour le calculer? Merci pour votre temps.intersection et union de polygones

+0

La fonction est 'polybool'. Et je peux calculer la zone avec 'polyarea' (qui est disponible pour moi). – Kate

+0

Je pense que vous ne devriez pas demander aux utilisateurs de violer les droits d'auteur. Édité. –

+0

@Kate: Vos polygones sont-ils garantis convexes? – Jacob

Répondre

0

J'ai trouvé des points d'intersection de mes polygones et a ajouté des sommets qui sont à l'intérieur/polygones extérieurs pour la tâche intersection/syndicat (vérifier si l'un des sommets du polygone 1 se trouve à l'intérieur d'un polygone 2 et vice-versa en utilisant « inpolygon '). Ensuite, tous les points ont été transformés en coordonnées polaires avec le centre dans les coordonnées moyennes de la matrice et triés par angle, de sorte qu'ils forment maintenant un contour fermé consécutif. Sachant cela, il est facile de trouver une zone d'intersection/union en utilisant 'polyarea'.

1

je ferais comme ceci:

  1. Soit S l'ensemble des sommets des deux polygones.
  2. Pour chaque arête e en polygone 1
    1. Pour chaque arête e en polygone 2
      1. Si e croise e
        1. Ajouter au point d'intersection à S
  3. Retirez tous les sommets S qui sont dans le polygone 1 ou 2.

L'ensemble des sommets résultant devrait constituer l'union des polygones.

Pour l'intersection vous suffit de supprimer tous les sommets dans S qui sont à l'extérieur des deux polygones 1 et 2 (dans la troisième étape).

(Vous pouvez rechercher point d'intersection et "à l'intérieur polygone" -checks ailleurs ;-)

+0

merci pour votre réponse, mais comment puis-je trouver des points d'intersection? est-il nécessaire d'utiliser l'équation d'une ligne? – Kate

+0

Ajout de deux liens vers ma réponse. – aioobe

+0

merci. Je connais les maths, mais malheureusement je ne suis pas un très bon programmeur, donc avoir des codes là-bas est très bien. – Kate

0

L'idée est de briser tous les entrecoupent bord en quatre pièces et former un nouveau polygone avec ceux-ci. Lorsque vous voulez l'union, prenez les deux bords extérieurs. Si vous voulez une intersection, prenez les deux bords intérieurs.

+0

Une bonne réponse donnerait un exemple. –

3

Vous avez juste besoin de trouver la zone d'intersection; la zone de l'union est trivialement obtenue à partir de cela. Le paquet PolygonIntersection de FEX pourrait être utile.

enter image description here

+1

Pouvez-vous montrer un pseudo-code pour que nous puissions l'implémenter dans d'autres langues? – Pacerier

Questions connexes