Ich versuche Wände zu erzeugen, die einen bestimmten Punkt von anderen bestimmten Punkten abschneiden. Das angehängte Bild zeigt, wonach ich suche:
- Blau von Rot getrennt.
- Blau getrennt von Rot und Gelb.
- Blau getrennt von Rot mit Fliesenhindernissen.
- Mehrere blaue von mehreren roten getrennt.
Irgendwelche Ideen, wie das geht?
procedural-generation
tiles
tilemap
grid
IanLarson
quelle
quelle
Antworten:
Ich werde ein allgemeines Konzept und drei Lösungen vorstellen, die dieses Konzept verwenden.
Das Konzept ist eine Einflusskarte : Für jeden Ort auf der Karte speichern Sie eine Zahl, die den Abstand zu jedem Farbpunkt darstellt. Auf diese Weise können Sie für jede Position abfragen, wie weit sie von Blau, Rot, Grün usw. entfernt ist. Wir nennen das Ergebnis die Einflusskarte.
Weitere Informationen zur Motivation, Erstellung und Verwendung von Einflusskarten in Spielen finden Sie unter: Die Mechanik der Einflussabbildung: Darstellung, Algorithmus und Parameter .
Ich habe keine Ahnung, wofür diese Wand gedacht ist. Mein Hauptkanon ist, dass wir über ein Strategiespiel sprechen und die KI entscheidet, wo die Wände platziert werden sollen. Zu diesem Zweck gibt es neben den hier vorgestellten noch viele andere Ansätze. Ein einfacher Ansatz wäre, Wände in einem festen Abstand von den Farbpunkten zu platzieren und die Bereiche zu kombinieren, wenn sie sich überlappen - und sie natürlich nicht über Hindernissen zu bauen -. Die Vorteile dieser Methode sind, dass sie garantiert, dass die Wände nicht zu stark sind weit weg, um Truppen zu schicken, um sie zu verteidigen, und es ist rechnerisch sehr billig. Ich gehe davon aus, dass Sie etwas Komplexeres wollen.
Lösung 1 :
Um einen Weg zu finden, Blau zu umwickeln, ermitteln Sie für jeden Punkt den Unterschied zwischen dem Abstand zu Blau und anderen Elementen. Nachtrag : Der Bereich, in dem der Unterschied positiv ist, ist der Einflussbereich für Blau. Wenn Sie die Einflussbereiche für jeden Farbpunkt übernehmen, können Sie ein Voronoi-Diagramm erstellen . Vielen Dank an Sirisian für die Erwähnung .
Wir können argumentieren, dass für einen Punkt nahe Blau der Unterschied positiv ist und für einen Punkt nahe einem anderen Farbpunkt der Unterschied negativ ist. Da der Abstand eine stetige Funktion ist, können wir nach dem Zwischenwertsatz argumentieren, dass sich die Differenz mindestens einem Punkt in der Mitte Null nähert. Eine Lösung wäre, eine Wand zu verfolgen, die den Abstand zwischen allen Kacheln minimiert, bei denen die Differenz gegen Null geht.
Was auch immer diese Lösung Hindernisse berücksichtigt oder nicht, hängt von der Distanzfunktion ab. Wenn Sie nur die Entfernungen von Manhattan oder Euklid verwenden, ohne mögliche Pfade zu berücksichtigen, nutzt die resultierende Wand vorhandene Hindernisse auf der Karte nicht aus.
Hinweis: Diese Lösung nähert sich in einem flachen Szenario der gleichen Fläche für Blau und den Rest.
Lösung 2 :
In der Zusammenfassung können Sie Drosselstellen zwischen dem Einflussbereich von Blau und den anderen finden und dann die Wände dort platzieren. Dadurch werden Wände an Stellen platziert, an denen der Einfluss nicht im Gleichgewicht ist (die Wände sind näher an einer Seite), aber die Länge der Wände wird minimiert.
Ein nützlicher Ansatz zum Auffinden von Drosselstellen besteht darin, das Szenario in konvexe Knoten zu unterteilen und ein Netzwerk zu erstellen, das das Szenario darstellt. Sie gehen davon aus, dass Sie Wände um die Knoten legen, die direkt blau sind, und dann über das Netzwerk vorrücken (immer den Abstand von blau vergrößern) und die Länge der Wand berücksichtigen, wenn Sie sie um das platzieren, was Sie bisher vorgerückt haben. Ihre Lösung ist die Position mit der minimalen Länge (und die Positionen der Wände sind die Drosselstellen).
In der Praxis ist der Algorithmus etwas komplizierter, da das Szenario möglicherweise Auswirkungen hat. Sie müssen jede Verzweigung nur einmal berücksichtigen und die beste Position für die Wand für diese Verzweigung auswählen.
Lösung 3 :
Die erste Lösung hat das Problem, dass es zu einer zu langen Wand kommen kann. Die zweite Lösung hat das Problem, dass es zu Wänden kommen kann, die zu weit von Blau entfernt sind.
Beachten Sie, dass beim Arbeiten mit Pixeln, Kacheln oder beim Arbeiten mit einem Netzwerk das Konzept der Einflusskarte als Darstellung der Entfernung zu den Farbpunkten gültig und nützlich ist. Somit ist es möglich, die Lösung 1 über das Netzwerk konvexer Knoten anzuwenden.
Meine dritte Lösung besteht darin, die oben genannten Ansätze zu kombinieren. Sobald Sie über das Netzwerk arbeiten, können Sie die Länge der Wand und den Unterschied im Einfluss - und jede andere gewünschte Metrik - als eine einzelne Indikatormetrik „Kosten“ betrachten, die Sie optimieren können.
quelle