Wie kann ich prozedural eine Wand finden, die zwei oder mehr Punkte auf einer gitterbasierten Karte trennt?

8

Ich versuche Wände zu erzeugen, die einen bestimmten Punkt von anderen bestimmten Punkten abschneiden. Das angehängte Bild zeigt, wonach ich suche:

Geben Sie hier die Bildbeschreibung ein

  1. Blau von Rot getrennt.
  2. Blau getrennt von Rot und Gelb.
  3. Blau getrennt von Rot mit Fliesenhindernissen.
  4. Mehrere blaue von mehreren roten getrennt.

Irgendwelche Ideen, wie das geht?

IanLarson
quelle
1
Dies ist ein bisschen zu breit ... möchten Sie das Blau minimieren oder möchten Sie vielleicht die gleiche Fläche, oder vielleicht spielt die Fläche keine Rolle, aber Sie möchten die Länge der Wand minimieren oder vielleicht alles, was irrelevant ist und was wirklich wichtig ist, ist schnell eine Lösung zu finden ... usw.
Theraot
1
Um Ihnen oder anderen eine mögliche Richtung zu geben, klingt dies im Zusammenhang mit einer Variante von "Manhattan Distance Voronoi", je nachdem, welchen Look Sie suchen oder nur mit regulären Voronoi.
Sirisian
In Übereinstimmung mit beiden anderen Kommentaren war mein erster Gedanke: "Es gibt unendlich viele Lösungen." Wobei "unendlich" nicht unendlich groß sein darf. Es gibt keine Einschränkungen, was dies erlaubt und nicht dies .
Draco18s vertraut nicht mehr SE
Tut mir leid, dass ich nicht genauer geworden bin. Wirklich, die einzige strenge Anforderung war, dass die Wand die gegebenen Punkte trennt, von denen ich weiß, dass sie nahezu unendliche Lösungen haben. Die Bilder, die ich zur Verfügung stellte, waren eigentlich nichts anderes als eine allgemeine Vorstellung davon, was ich versuchte, also wäre Ihre Bearbeitung, Draco, ein absolut gültiges Ergebnis für meine Zwecke. Ich habe nur nach Methoden gesucht, mit denen solche Ergebnisse erzielt werden können, selbst wenn es eine große Anzahl von Ergebnissen gibt.
IanLarson

Antworten:

8

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.

Theraot
quelle
1
Das ist super hilfreich. Die Verwendung einer Einflusskarte klingt genau so, wie ich es brauche. Danke für die Links und die ausführliche Antwort.
IanLarson