2009-08-12 15 views
0

Nehmen wir an, ich habe eine feste Anzahl (X) von Punkten, z. Koordinaten innerhalb einer gegebenen Ebene (ich denke, Sie können es eine 2-D Punktwolke nennen).So partitionieren Sie eine Ebene

Diese Punkte sollten in Y Polygone aufgeteilt werden, wobei Y < X. Die Polygone sollten nicht überlappen. Es wäre wunderbar, wenn die Polygone konvex wären (wie ein Voronoi-Diagramm).

Stellen Sie sich vor Orte wie Länder bilden. Zum Beispiel habe ich 12 Punkte und möchte 3 Polygone mit jeweils 4 Punkten erstellen.

Ich dachte über das Erstellen eines Gitters, das die Punkte abdeckt. Dann iteriere über die Punkte und weise sie den nächsten Gitterzellen zu.

Vielleicht vermisse ich das Offensichtliche? Ich bin mir sicher, dass es bessere Lösungen gibt.

Danke, Daniel

Ich habe gerade an optimization (kmeans++) .maybe dies bessere Ergebnisse bringen wird ..

+0

mit einem Gitter, könnten Sie leere Zellen erhalten, oder alle Punkte in einer Zelle nützlich sein. Mit einem Radial-Array können Sie dies mit einer Lösung bewältigen, die schnell und einfach zu implementieren ist. –

Antwort

1

Sie die Voronoidiagramm erwähnen, haben Sie bei der entsprechenden tesselation algorithms geschaut? Wenn ja, könnten Sie betonen, warum sie nicht für Sie arbeiten?

+0

Voronoi-Diagramme haben einen einzelnen Punkt pro Polygon, hier sollte jedoch eine beliebige Anzahl von Punkten das Polygon bilden. Was ich vergessen habe zu erwähnen: Ich habe auch Lloyd's Algorithmus (k-means) ausprobiert, aber das Ergebnis hängt zu sehr von der anfänglichen Auswahl ab. Die Konvergenz ist im Allgemeinen nicht zu gut. – puls200

0

Sie müssen wahrscheinlich besser definieren, welche Kriterien Sie zum Erstellen Ihrer polygonalen Partitionen verwenden möchten. Zum Beispiel, wenn es Nähe ist, könnten Sie Folgendes tun:

  • Konstruieren Sie ein Voronoi-Diagramm.
  • Wo zwei benachbarte Polygone, die einen nahen Nachbarn haben, verschmelzen sie zu einem einzigen Polygon
  • wiederholen, bis die gewünschte Anzahl von Polygonen

Wenn es die gleiche Anzahl von Punkten pro Polygon haben, die Sie tun können etwas Ähnliches basierend auf dem Zusammenführen benachbarter Polygone, bis eine gewünschte Punktzahl erreicht ist.

Bearbeiten: Wenn Konvexität das wichtigste Problem war, könnten Sie einfach einen Punkt in der Mitte der Wolke nehmen und Radiale an den Rand projizieren, um die Wolke in eine radiale Anordnung von Dreiecken zu unterteilen.

Verwandte Themen