Simplifié (ou lisse) des polygones qui contiennent l'original détaillée polygone
J'ai détaillé polygone 2D (représentant une zone géographique), qui est définie par un ensemble très grand nombre de sommets. Je suis à la recherche d'un algorithme qui permettra de simplifier et lisse le polygone (en réduisant le nombre de sommets) avec la contrainte que le zone du polygone résultant doit contenir tous les sommets de l'détaillée polygone.
Pour le contexte, voici un exemple de l'arête d'un polygone complexe:
Ma recherche:
-
J'ai trouvé l'Ramer–Douglas–Peucker algorithme qui permettra de réduire le nombre de sommets -, mais le polygone ne contiennent pas tous les originaux des sommets du polygone. Voir cet article Ramer-Douglas-Peucker sur Wikipédia
-
J'ai envisagé d'élargir le polygone (je crois que ceci est également connu comme vers l'extérieur du polygone de compensation). Je trouve ces questions: L'expansion d'un polygone (convexe seulement) et Gonfler un polygone. Mais je ne pense pas que cela permettra de réduire considérablement le détail de mon polygone.
Merci pour tous les conseils que vous pouvez me donner!
- Je suis confus par cette phrase - "je suis à la recherche d'un algorithme qui permettra de simplifier et lisse le polygone (en réduisant le nombre de sommets) avec la contrainte que le polygone résultant doit contenir tous les sommets de l'détaillée polygone.". Comment réduire le nombre de sommets, tout en conservant tous?
- Je veux dire le polygone résultant doit avoir moins de sommets, mais la zone il définit doit contenir tous les sommets qui étaient dans le polygone. Merci.
- La performance est un problème ici?
- La Performance est un problème; je vais le tracé de ces polygones, sur une carte, le long de avec d'autres données. Moins de sommets permettra de rendre la carte plus réactif. L'autre problème, c'est l'esthétique, où un plus un polygone (ou de la ville de périmètre dans ce cas) sera plus propre.
- Si le final de vertex set faire partie de l'ensemble original, ou pouvez-vous faux un ensemble de "nouveaux" et les différents sommets?
- Si le nouveau polygone avait totalement différents sommets sur le polygone, qui serait d'accord, à condition que les bords du nouveau polygone ne sont pas trop loin de l'origine des bords. par exemple, je ne veux pas de l'enveloppe convexe, ou d'un grand cercle contenant l'original du polygone.
- Ha! cette "liberté" qui rend le problème beaucoup plus difficile! 😀
- tout à fait d'accord. Cela m'a déconcerté.
- Quelle plate-forme/logiciel de préféreriez-vous travailler?
- Ha, open source javascript ou python, ce serait parfait! ;o) Mais en réalité, j'ai juste besoin de comprendre l'algorithme de sorte que nous pouvons coder.
- Si vous avez besoin de le faire une fois, puis illustrator est une bonne option.
Vous devez vous connecter pour publier un commentaire.
Modifier
À compter de 2013, la plupart des liens ci-dessous ne sont pas fonctionnels plus. Cependant, j'ai trouvé l'article cité, l'algorithme inclus, toujours disponible à cette (très lent) serveur.
Ici vous pouvez trouver un projet traitant exactement à vos questions. Bien qu'il travaille principalement avec une zone "rempli" par des points, vous pouvez le configurer pour fonctionner avec un "périmètre" de la définition de type que le vôtre.
Il utilise un k-plus proches voisins de l'approche pour le calcul de la région.
Échantillons:
Ici vous pouvez demander une copie de la feuille de papier.
Apparemment ils conçu pour vous offrir un service en ligne pour demander des calculs, mais je n'ai pas le tester, et probablement il n'est pas en cours d'exécution.
HTH!
C'est un problème intéressant! Je n'ai jamais essayé quelque chose comme cela, mais voici une idée sur le dessus de ma tête... toutes mes excuses si il n'a pas de sens ou ne fonctionne pas 🙂
Chaque niveau de récursivité devrait donner une meilleure approximation.... lorsque vous avez atteint un niveau satisfaisant, de fusionner toutes les coques à partir de ce niveau pour obtenir la valeur finale de polygone.
Que c'est comme s'il pouvait faire le travail?
J'ai eu un problème similaire : j'ai besoin d'un gonflage de la simplification des polygones.
J'ai fait un algorithme simple, en supprimant concav point (cela permettra d'accroître la taille des polygones) ou la suppression de bord convexe (entre 2 convexe des points) et prolongating bords adjacents. Dans tous les cas, faire l'un de ces 2 possibilités de supprimer l'un des points du polygone.
J'ai choisi de supprimé le point ou l'arête qui mène à la plus petite zone de variation. Vous pouvez répéter ce processus jusqu'à ce que la simplification est ok pour vous (par exemple pas plus de 200 points).
Les 2 principales difficultés ont été d'obtenir un algorithme rapide (en évitant de calculer sommet/arête de suppression de la variation de deux fois et le maintien de possibilités de tri) et d'éviter l'insertion de l'auto-intersection dans le processus (pas très facile à faire et à expliquer, mais possible avec peu de complexité de calcul).
En fait, après avoir regardé de plus près, il est une idée similaire à celle de la Visvalingam avec l'adaptation de bord de suppression.
À un certain degré, je ne suis pas sûr de ce que vous essayez de faire, mais il semble que vous avez deux bonnes réponses. On est Ramer–Douglas–Peucker (DP) et de l'autre le calcul de l'alpha de la forme (aussi appelé Concave de la Coque, de non-convexe de coque, etc.). J'ai trouvé une étude plus récente décrivant alpha formes et l'a lié ci-dessous.
Personnellement, je pense que DP avec polygone expansion est le chemin à parcourir. Je ne suis pas sûr de savoir pourquoi vous pensez qu'il ne réduire considérablement le nombre de sommets. Avec DP vous offre un facteur et vous pouvez faire tout ce que vous voulez au point où vous vous retrouvez avec un triangle n'importe ce que votre entrée. La cueillette de ce facteur peut être difficile, mais dans votre cas, je pense que c'est la meilleure méthode. Vous devriez être en mesure de déterminer le facteur basé sur la taille de la plus grande peu de détail, vous voulez aller loin. Vous pouvez le faire avec une analyse directe ou par calcul à partir de votre source de données.
http://www.it.uu.se/edu/course/homepage/projektTDB/ht13/project10/Project-10-report.pdf
Je pense que Visvalingam de l'algorithme de peut être adapté à cette fin - en sautant de suppression de triangles qui permettrait de réduire la zone.