Ich würde dieses Problem mit zwei Durchgängen von Voronoi-Diagrammen lösen:
Erster Durchgang: Region Partitioning
Der erste Durchgang würde eine etwas spärliche Punkteverteilung verwenden (dh der Abstand zwischen den Punkten sollte relativ groß sein), um die Insel grob in Regionen zu unterteilen (siehe den Hinweis zur Punktgenerierung weiter unten). Erstellen Sie als nächstes ein Voronoi-Diagramm auf der Grundlage dieser Punkte. Dies unterteilt die Insel in polygonale Regionen um jeden Punkt, wie unten gezeigt:
Zweiter Durchgang: Randomisierung
Nachdem die Insel nun in Regionen unterteilt wurde, besteht der nächste Schritt darin, die Grenzen zwischen ihnen zu "verschärfen". Erstellen Sie dazu eine neue Ebene von Punkten mit einer kompakteren Punkteverteilung (dh der Abstand zwischen den Punkten sollte klein sein) und verwenden Sie diese Punkte erneut, um ein weiteres Voronoi-Diagramm zu erstellen. Ordnen Sie es als Nächstes für jede kleinere Region einer größeren Region zu, indem Sie den Startpunkt überprüfen. Dies führt zu zackigeren Grenzen zwischen den größeren Unterteilungen. Hier ist eine Nahaufnahme davon, wie es mit beiden Voronoi-Diagrammen aussieht:
Und hier ist derselbe Bereich, der nur die letzten Grenzen zeigt:
Kommentare zu Point Generation
In Bezug auf die Punktgenerierung verwende ich gerne eine Poisson-Verteilung , um eine relativ schöne und gleichmäßige Punkteverteilung zu erzielen. Die andere gebräuchliche Option für eine ähnlich gleichmäßige Verteilung ist die Verwendung des Lloyd-Algorithmus für eine Reihe von "regulären" Zufallspunkten. LLoyd's ist einfacher zu codieren, kann jedoch mit einigem Aufwand ermittelt werden, wie viele Durchgänge erforderlich sind, um das gewünschte Ergebnis zu erzielen.
Ein mögliches Problem bei diesem Ansatz besteht darin, dass die Partitionierung im ersten Durchgang einige sehr kleine Bereiche erzeugen kann. Wenn Sie sie nicht in Ihrem Endergebnis haben möchten, würde ich sie einfach mit einer zufälligen angrenzenden Region zusammenführen.
Schlussbemerkungen
Die Illustrationen, die ich zur Verfügung gestellt habe, sind Rasterbilder, aber diese Technik funktioniert auch mit polygonalen / vektordarstellungen.