Grundlegende Pfadfindung mit Vermeidung von Hindernissen in einem kontinuierlichen 2D-Raum

8

Ich schreibe eine Simulation, in der ein Kreaturobjekt in der Lage sein sollte, sich auf ein beliebiges anderes Objekt in der Umgebung zu bewegen, um Hindernisse zu gleiten, anstatt irgendeine intelligente Pfadsuche durchzuführen. Ich versuche nicht, einen Pfad zu haben - nur um in eine allgemeine Richtung zu gehen und um Hindernisse herum zu springen.

Es ist eine 2D-Umgebung (Draufsicht), und jedes Objekt hat ein begrenzendes Rechteck für die Kollisionserkennung. Es gibt kein Gitter und ich suche keine A * Lösung.

Ich konnte keine Tutorials zu dieser Art von "dummer" kollisionsgestützter Wegfindung finden, daher beschreibe ich das vielleicht nicht mit den gebräuchlichsten Begriffen.

Gibt es Empfehlungen zur Implementierung (oder Links zu Tutorials)?

    
kpozin 17.05.2009, 16:03
quelle

5 Antworten

6

Was Guillaume über die Vermeidung von Hindernissen gesagt hat, ist eine anti- Schwerkraftbewegung . Sie behandeln lokale Hindernisse als Punktquellen der Antigravitation, das Ziel als Schwerkraft, und Ihr computergesteuerter Charakter rutscht (wie Seife!) Um die Hindernisse herum, um zum Ziel zu gelangen.

    
Paul 17.05.2009, 20:33
quelle
5

Sie können zwei Steueralgorithmen kombinieren:

seek : Sie wenden eine Lenkkraft in der Richtung an, die die Differenz zwischen der aktuellen Geschwindigkeit und der gewünschten Geschwindigkeit zum Ziel darstellt

Hindernisvermeidung : Sie antizipieren die Zukunft des Fahrzeugs mit einer Box, deren Länge eine konstante Zeit multipliziert mit der aktuellen Geschwindigkeit des Fahrzeugs ist. Jedes Hindernis, das diese Box schneidet, ist eine potenzielle Kollisionsgefahr. Die nächste solche Bedrohung wird zur Vermeidung ausgewählt. Um ein Hindernis zu vermeiden, wird eine seitliche Lenkkraft entgegen der Mitte des Hindernisses aufgebracht. Zusätzlich wird eine Brems- (Verzögerungs-) Kraft aufgebracht. Diese Kräfte variieren mit der Dringlichkeit (der Abstand von der Spitze der Box bis zum Punkt der möglichen Kollision). Lenkung variiert linear, Bremsung variiert quadratisch.

Weitere Informationen finden Sie auf der Website " Lenkverhalten für autonome Charaktere "

Grüße

Guillaume

PS: Angenommen, Sie verwenden eine Punkt / Geschwindigkeit / Beschleunigung-Methode für die Bewegung des Objekts.

    
PATRY Guillaume 17.05.2009 20:11
quelle
2

Vielleicht könnten Sie Pledge's Algorithmus

verwenden     
Dario 17.05.2009 16:25
quelle
1

Immer wenn deine Kreatur, die in Vektorrichtung v reist, mit einer Mauer kollidiert, deren Richtung durch den Vektor w repräsentiert wird, wird die Richtung, die du "gleiten" musst, durch den Vektor von% co_de gegeben % auf v . Dies kann mit

gefunden werden %Vor%

Dabei ist w das Vektor-Dot-Produkt und . ist die Größe des Vektors |w| (= %Code%). Wenn w ein Einheitsvektor ist, wird dies einfach

%Vor%

Wenn du den sich ergebenden Vektor als Geschwindigkeit deiner Kreatur verwendest, wird deine Kreatur schnell reisen, wenn sie nur die Wand "streift", und langsam, wenn sie fast gegen die Wand schlägt. (Dies ist, wie die meisten First-Person-Shooter-Spiele Kollisionen für den menschlichen Spieler verwalten.)

Wenn deine Kreatur stattdessen immer mit voller Geschwindigkeit fahren soll, brauchst du nur das Zeichen sqrt(w . w) - du wirst immer entweder in Richtung der Wand ( w ) oder in die entgegengesetzte Richtung ( v . w ).

Das Problem, das du haben wirst, ist, wenn deine Kreatur direkt gegen die Wand schlägt. In diesem Fall ist Ihr projizierter Vektor (0, 0), und Sie benötigen eine andere Technik, um zu entscheiden, auf welche Weise ( w oder -w ) gehen soll. Der übliche Ansatz ist hier A *, obwohl dies unnötig sein kann, wenn Ihre Umgebung genügend Struktur besitzt.

    
j_random_hacker 17.05.2009 16:32
quelle
-1

Ich habe vor einiger Zeit in C # einen Pathfinding-Algorithmus gepostet

Hier ist der Link

Sie können versuchen, es als Ausgangspunkt zu verwenden, dh Sie könnten die Funktion ändern, die die nächste Zelle überprüft, um zu sehen, ob es möglich ist, nach Hindernissen zu suchen, und Sie könnten kleine Intervalle anstelle von Anfang und Ende eingeben Punkte, ähnlich wie mehrere Mini-Pahfinding-Routen.

(Der Text ist in Spanisch, aber Sie können die Anwendung über den Link oben herunterladen)

    
juan 17.05.2009 16:05
quelle