web-dev-qa-db-fra.com

Python Polygone de coque concave d'un ensemble de lignes

Je cherche un python Mise en œuvre pour le problème de la coque concave. Mon problème est un peu différent car je n'ai pas de jeu de points, mais un ensemble de lignes, où le résultat concave -Hull va à peu près lié le long des lignes (comme dans le dessin gauche). Left: Input, Right: Output

Je comprends qu'il n'y a pas de "réponse correcte". Mais une approximation suffira à mes besoins. Une solution possible consiste à prendre chaque ligne et à l'interpoler à une gamme de disons 20 points et à trouver la coque concave de tous les points créés. Pas sûr de ça.

Éditer:

Je pense que les lignes ajoutent une certaine valeur rendre la coque plus claire et plus facile à trouver.

Un bon python Mise en œuvre pour le problème, même s'il n'utilise pas les lignes (il suffit de trouver une coque concave à partir d'une liste de points) sera également utile

7
user972014

Voici un Poste de blog fin (et associé Github Repo ) sur la recherche de la coque concave pour un ensemble de points à l'aide de Python.

Ma recommandation à vous est la suivante. Créez un ensemble de points à l'aide des points de terminaison de chaque ligne. Ensuite, utilisez le lien vers le code pour générer une coque concave pour ces points, avec une supposition pour la valeur de l'alpha. Une fois que cela est fait, vous pouvez vérifier si la coque générée recouper l'une de vos lignes , et si elle modifie Alpha. Vous pouvez faire vérifier l'intersection et le réglage automatisé si vous le souhaitez.

Vous pouvez également essayer d'ajouter les points médians de vos lignes à votre ensemble de points, pouvant diminuer le nombre d'alphas dont vous avez besoin pour essayer.

2
sgillen

Bien que cette question puisse déjà être répondue, voici aussi mon approche:

Comme les autres ont également indiqué que vous devez d'abord convertir les points finaux des lignes en une liste de points.

Après cela, vous pourriez avoir besoin de cette fonction rangée de la bibliothèque SICPY: scipy.spatial.ConvexHull(). Fondamentalement, vous venez de passer un tableau numpy avec les sommets à la fonction (créé avec numpy.array()) et il renvoie un objet hull

ICI est la documentation

Avec le .points- Attribut Vous pouvez soit obtenir tous les points, soit avec le .vertices- Attribut Vous pouvez obtenir les indices de la liste d'entrée qui forment la coque. Aussi, vous pouvez obtenir des choses comme zone ou volume (pour les formes 3D) si vous êtes intéressé par cela.

~ Okaghana

0
Okaghana