Ich versuche, prozedurale Generierungstechniken zu lernen. Speziell für Dungeons. Ich habe mit einem 2D-Array angefangen und meine Räume gut generiert. Jedes Zimmer enthält Wandfliesen (siehe Abbildung unten).
Im Moment benutze ich A *, um die Räume miteinander zu verbinden. Dies hat jedoch einige Wege, die direkt durch andere Räume oder um Räume herum führen. Nachdem ich ein bisschen gegoogelt hatte, fand ich diese Demo, die mich auf die Idee brachte, Delaunay Triangulation zu verwenden, um die Räume richtig zu verbinden, ohne bereits vorhandene Verbindungen / Räume zu durchlaufen.
Aber wie wende ich es auf mein 2D-Array-Setup an? Mein erster Gedanke ist, dass ich über den Tellerrand hinaus denken sollte (2d Array haha) und meine Räume greifen und daraus ein vollständiges Diagramm erstellen und dann die Delaunay-Triangulation anwenden sollte.
Ich habe noch nie etwas mit Grafiken gemacht. Was ich also wissen möchte, ist: a) Ist mein Denken richtig, wenn ich das Diagramm mit allen verknüpften Räumen erstelle und dann die Triangulation anwende und b) wo soll ich anfangen?
[kleine Bearbeitung] Nachdem ich mich ein bisschen mehr im Stackoverflow umgesehen hatte, fand ich diesen Beitrag, in dem die Grafiken ausführlicher erklärt wurden. /programming/15306040/generate-an-adjacency-matrix-for-a-weighted-graph
quelle
Antworten:
Das ist eine nette Demo. Die beste Referenz für Delaunay-Triangulationen und Voronoi-Diagramme, die ich gefunden habe, ist Jonathan Shewchuks Buch und Vorlesungsnotizen . Das Buch ist wesentlich weiter fortgeschritten als die Vorlesungsunterlagen und befasst sich mehr mit der Verfeinerung von Maschen . Ich schlage vor, Sie beginnen mit den Vorlesungsunterlagen.
Müssen Sie zur Schule gehen, um eine Delaunay-Triangulation zu erzeugen? Mist nein! Eine Delaunay-Triangulation ist nur die eindeutige Triangulation, so dass der Umkreis jedes Dreiecks (scrollen Sie nach unten zu Shewchuks Antwort) nur die 3 Eckpunkte jedes Dreiecks und nichts weiter einschließt.
(Bild aus Shewchuks Vorlesungsunterlagen, oben verlinkt)
Algorithmen
Ein Artikel, der zwei Algorithmen zur Konstruktion einer Delaunay-Triangulation beschreibt, ist ein guter Anfang.
Die Hauptmethode, über die die Leute sprechen, besteht darin, zuerst das Voronoi-Diagramm zu erstellen.
Fortunes Algorithmus
Ich kann Ihnen hier nur ein paar Hinweise geben, nachdem ich angefangen habe, mit dem Fortune-Algorithmus zu arbeiten, aber das Projekt abgebrochen habe, weil Fortunes Code extrem schwer zu verstehen ist. Es ist eine JavaScript - Implementierung hier .
Ein paar andere Fortune-Ressourcen:
Ich weiß, dass ich hier viele Links gepostet habe, aber mein Rat ist, den Fortune-Algorithmus zu vermeiden . Eine einfachere Möglichkeit besteht darin, die unten beschriebenen Kippkanten zu verwenden.
Kanten umdrehen
Ein viel einfacherer Weg, dies zu tun, heißt Flipping Edges . Was Sie tun, ist mit einer beliebigen Triangulation zu beginnen und dann einfach "Kanten umzudrehen", so dass jedes Dreieck zu "Delaunay" wird (der Kreis jedes Dreiecks enthält keine anderen Punkte als seine eigenen 3 Eckpunkte). Sobald alle Tris Delaunay sind, haben Sie die Delaunay-Triangulation.
quelle