2010-09-01 6 views
5

Ich versuche gerade, das von einem Gerät abgedeckte Gebiet während einer Betriebsperiode aufzubauen. Der erste Schritt in diesem Prozess scheint ein Polygon des abgedeckten Bereichs zu konstruieren. Da das Muster keine Standardform ist, überhöhen konvexe Rümpfe den abgedeckten Bereich, indem sie zum größtmöglichen Abdeckungsbereich springen.Wie generieren Sie die nicht konvexe Hülle aus einer Reihe von Punkten?

Ich habe ein Papier gefunden, das das Konzept der nichtkonvexen Hüllengenerierung zu behandeln scheint, aber keine Diskussionen darüber, wie dies in einer Hochsprache implementiert werden kann.

Hat jemand einen einfachen Algorithmus zum Konstruieren einer nicht-konvexen Hülle oder einer konkaven Hülle oder vielleicht eines Python-Codes gesehen, um das gleiche Ergebnis zu erzielen?

Ich habe konvexe Rümpfe hauptsächlich Qhull versucht, mit einer begrenzten Kantengröße mit begrenztem Erfolg. Auch habe ich einige lizensierte Bibliotheken bemerkt, die nicht verteilt werden können, also ist das leider vom Tisch. Irgendwelche besseren Ideen oder Kochbücher?

+1

Möglicherweise verwandte info: http://gis.stackexchange.com/questions/1200/concave-hull-definition-algorithms-and-practical-solutions – Gilead

+1

Ist das Problem gut definiert? Willst du * irgendeinen * nicht-konvexen Rumpf, der die Punkte abdeckt? Oder gibt es zusätzliche Einschränkungen? Betrachten Sie drei Punkte, die ein gleichseitiges Dreieck und einen vierten Punkt in der Mitte bilden. Es gibt (mindestens) drei mögliche nicht konvexe Hüllen, die diese Punkte einschließen. –

+3

Wow, all diese verschiedenen Stackexchange-Sites sind wirklich gut dafür geeignet, Fragen außerhalb der Sichtweise von Leuten zu stellen, die sie beantworten könnten. :( –

Antwort

4

Sie könnten versuchen, in Alpha-Formen zu suchen. Die CGAL-Bibliothek kann sie berechnen.

Bearbeiten: Ich sehe, dass das Papier, das Sie verknüpften, Alphaformen verweist, und hat auch eine Algorithmusauflistung. Ist das nicht hoch genug für dich? Da Sie Python als Tag aufgelistet haben, bin ich sicher, dass es Delaunay-Triangulationsbibliotheken in Python gibt, was meiner Meinung nach der schwierigste Teil bei der Implementierung des Algorithmus ist. Sie müssen nur sicherstellen, dass Sie die resultierende Triangulationsausgabe ändern können. Die Grenzabfragefunktionen können wahrscheinlich mit assoziativen Arrays implementiert werden.

+0

Leider die Python-Bindungen für CGAL, die Sie erwähnen, nicht mehr mit den neuesten Versionen von Boost-Python und CGAL zu kompilieren. Scheint, dass das Projekt nicht mehr wirklich unterstützt wird. Gibt es andere Python-Alternativen? – conradlee

-1

Ich schrieb an application, um die nicht-konvexe Hülle einer Reihe von Punkten zu berechnen (Sie benötigen Java jre, um es auszuführen).

+2

Aber du bist wirst du den Code nicht teilen? –