Ich versuche eine ziemlich große zweidimensionale Sternenkarte zu erstellen, die verschiedene Fraktionen / Zustände zeigt, die jeweils ein oder mehrere Sternensysteme besitzen. Ich möchte automatisch Grenzen / Gebiete für die Fraktionen erstellen.
Die Idee ist, im Wesentlichen von so etwas auszugehen (die Punkte repräsentieren Sternensysteme auf einer 2D-Ebene, Farben sind Fraktionszugehörigkeiten)
dazu
Das Generieren solcher Karten scheint eine ziemlich häufige Anforderung zu sein, daher lautet meine eigentliche Frage: Gibt es Standardalgorithmen zum Generieren von Zustandsbereichen wie gezeigt? Wenn ja, können Sie mich darauf hinweisen? Wenn nicht, können Sie sich einen guten Algorithmus vorstellen (Grundidee oder Pseudocode sind in Ordnung)?
Die Leistung des Algorithmus ist für mich kein Hauptanliegen, daher hätte ich lieber eine "schönere" Karte als eine schneller zu generierende. Diese ähnliche Frage bietet einen Ansatz, der wahrscheinlich auf mein Problem anwendbar ist, obwohl eine gewisse "Verschönerung" erforderlich ist: Wie erstelle eine Karte aus einem Diagramm
Lassen Sie mich erklären, was ich meine, wenn ich hübscher sage: Am Ende der verknüpften Frage präsentiert die Fragestellerin ihr Endergebnis, nachdem sie die akzeptierte Antwort implementiert hat. Mein erstes Problem hier: Die Bereiche für die Knoten Nr. 6, Nr. 9 und Nr. 12 sind sehr klein und merkwürdig geformt. Anstelle der scharfen Kanten würde ich auch einen glatteren, geschwungenen Look bevorzugen.
Meine eigenen Ideen, einschließlich der jeweiligen Nachteile / Fragen, die ich mit ihnen sehe:
- Generieren Sie für jede Fraktion ein "konvexes Rumpf" -Polygon und erweitern Sie es dann etwas nach außen. Probleme: Keine konkaven Funktionen. Wie gehen Sie mit Überschneidungen um?
- Generieren Sie ein Voronoi-Diagramm für die Punkte und verwenden Sie dann die Voronoi-Polygonkanten zwischen benachbarten Systemen verschiedener Fraktionen als Grenzen. Problem: Große Polygone an den Kartenrändern - wie identifiziere und behebe ich diese?
- Generieren Sie für jeden Punkt ein Polygon mit fester Größe und vereinen Sie alle Polygone für eine einzelne Fraktion (was zu einem großen, möglicherweise komplexen "Fraktionspolygon" führt). Dann tun Sie etwas, um überlappende Bereiche zwischen zwei Fraktionen in Einklang zu bringen. Probleme: Wie würde ich das genau machen? Nicht gerade ein trivialer Prozess. Was ist, wenn sich mehr als zwei Fraktionen überschneiden?
Deine Hilfe wird wertgeschätzt.
Nachtrag: Nachdem ich über die ersten beiden Antworten und ihre jeweiligen Lösungsansätze nachgedacht habe, habe ich festgestellt, dass meine obigen Anforderungen unvollständig sind.
Ich muss hinzufügen, dass die Karte dünn besiedelte Gebiete haben kann, was bedeutet, dass es einen isolierten Stern oder eine Gruppe von Sternen geben kann. Ich möchte jeden dieser Cluster mit einem eigenen zusammenhängenden farbigen Bereich anzeigen. Etwas wie das:
Mir ist klar, dass dies möglicherweise einen ersten Schritt erfordert, der Cluster identifiziert und dann den eigentlichen Algorithmus für jeden der Cluster ausführt.