2009-01-25 10 views
5

Ich habe eine große Anzahl von Scheitelpunkten, einige davon sind Kanten, einige sind redundant (innerhalb der Form) und ich möchte diese entfernen.Der beste Algorithmus, um die Kanten (Polygone) von Scheitelpunkten zu finden

Der einfachste Algorithmus, den ich mir vorstellen kann, besteht darin, einen nach dem anderen zu überprüfen, wenn sie die von den anderen gebildete Form treffen. Aber es sollte ein sehr langsamer Algorithmus sein.

Ich dachte daran, eine von der Kante (die am weitesten vom Ursprung entfernt pro Beispiel) zu wählen und den längsten Weg von diesem Anfang zu berechnen ... sollte den Kantenweg bekommen, richtig?

Irgendwelche Vorschläge?

+0

Möchten Sie _a_ ein Polygon, das alle Punkte abdeckt, oder möchten Sie das _kleinste_ (in Bezug auf Fläche) Polygon, das alle Punkte abdeckt? – sykora

+0

@sykora, ein Polygon, das alle Punkte abdeckt. Graham-Scan scheint gültig zu sein. Vielen Dank. – fabiopedrosa

Antwort

7

Der Trick mit polyedrischen Algorithmen ist die Wahl eines, das zu Ihrer Eingabe und Ihrer gewünschten Ausgabe passt, da es mehrere Möglichkeiten zur Darstellung eines Polyeders gibt und die Konvertierung zwischen den Darstellungen teuer sein kann. In diesem Fall beginnen Sie mit Punkten und möchten mit Scheitelpunkten enden. Daher sollte der Graham scan Algorithmus zur Berechnung der Scheitelpunkte der convex hull den Zweck erfüllen, obwohl es einige Anstrengungen erfordern könnte, ihn über den 2-D-Fall hinaus zu erweitern. Es ist O (n log n) in der Anzahl der Eingabeecken.

+0

Der Graham-Scan gibt Ihnen grundsätzlich die konvexe Hülle. – shoosh

6

Ich weiß nicht, was der beste Algorithmus ist, um das Polygon zu finden, aber das Polygon, nach dem Sie suchen, heißt "Convex Hull".

Wenn Sie danach suchen, sollten Sie einen passenden Algorithmus finden.

+0

Ich glaube nicht, dass er nach der konvexen Hülle sucht, da er die Ecken des Polygons, das durch seine Ecken gebildet wird, haben möchte. Eine konvexe Hülle würde sogar einige ausschließen, die er möchte. – sykora

+0

"einige sind redundant (innerhalb der Form) und ich möchte diese entfernen." – Timbo

+0

Ich versuche nicht, die Kanten zu reduzieren ... Ich bin dabei, ein Polygon aus einer Scheitelpunkt-Sammlung zu erstellen, die einige davon überflüssig macht. – fabiopedrosa

4

The Convex Hull ist eines der am meisten erforschten Probleme der Computational Geometry. Der Graham Scan ist einer der einfacheren convex hull algorithms, aber sicher nicht der einzige. The Gift-wrapping Algorithm, auch Jarvis 'March genannt, ist die einfachste, die ich kenne. The Stony Brook algorithm repository hat mehrere Implementierungen von konvexen Hüllenalgorithmen in C und C++. Geometry in Action zeigt hauptsächlich Anwendungen von konvexen Rümpfen. Hier ist eine Sammlung von low-dimensional und arbitrary-dimensional konvexen Hüllen Berechnungsprogrammen.