Basic pathfinding mit Hinderniserkennung in einem kontinuierlichen 2D-Raum
Schreibe ich eine simulation, in der eine Kreatur Objekt sollte in der Lage sein sich zu bewegen in Richtung einer anderen beliebigen Objekt in der Umgebung, gleiten um Hindernisse herum, anstatt jede intelligente Wegfindung. Ich versuche nicht, es zu haben plan ein Weg -- nur zu bewegen in einer Allgemeinen Richtung, und hüpfen um Hindernisse herum.
Es ist ein 2D-Umgebung (Ansicht von oben), und jedes Objekt verfügt über ein umschließendes Rechteck für die Kollisionserkennung. Es gibt kein raster, und ich bin nicht auf der Suche nach Einer Lösung.
Ich habe nicht in der Lage zu finden alle tutorials, die auf dieser Art von "dumm" collision-based Wegfindung, so könnte ich nicht beschreiben, diese mit den gängigsten Begriffen.
Irgendwelche Empfehlungen, wie die Umsetzung dieser (oder links zu tutorials)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erweitern auf das, was Guillaume meinte etwa Hinderniserkennung, eine Technik, die funktioniert gut für Sie ist anti-Schwerkraft-Bewegung. Sie behandeln die lokalen Hindernisse als Punktquellen von antigravity, das Ziel als die Schwerkraft, und Ihr computer gesteuert ist rutschig (seifig!) um die Hindernisse bis zum Ziel.
können Sie kombinieren zwei Lenk-Algorithmus :
suchen : Sie übernehmen die Lenkung der Kraft in der Richtung, die die Differenz zwischen der aktuellen Geschwindigkeit und der gewünschten Geschwindigkeit auf das Ziel zu
Hindernisvermeidung : Sie rechnet für das Fahrzeug der Zukunft mit einem Feld, dessen Länge eine Konstante Zeit multipliziert mit der aktuellen Geschwindigkeit des Fahrzeugs. Jedes Hindernis, das schneidet diese box ist eine mögliche Kollisionsgefahr. Der nächste solche Bedrohung ist gewählt, der für die Vermeidung. Um zu vermeiden, ein Hindernis, eine seitliche Lenkung der Kraft entgegengesetzt zu dem Hindernis entfernt. Zusätzlich wird eine Bremsung (Verzögerung) Gewalt angewendet wird. Diese Kräfte variieren mit Dringlichkeit (der Abstand von der Spitze der box bis zu dem Punkt der möglichen Kollision). Die Lenkung verhält sich Linear, Bremsen variiert quadratisch.
Finden Sie mehr auf der website "Steering Behaviors For Autonomous Characters"
hinsichtlich
Guillaume
PS : dies wird vorausgesetzt, dass Sie mit einem Punkt/Geschwindigkeit/Beschleunigung-Methode für die Bewegung des Objekts.
Vielleicht könnten Sie Pledge-Algorithmus
Wenn deine Kreatur, Reisen in Vektor-Richtung
v
, kollidiert mit einer Wand, deren Richtung wird repräsentiert durch einen Vektorw
die Richtung, die Sie benötigen, um zu "schieben" ist gegeben durch den Vektor, der die Projektion desv
aufw
. Diese finden Sie überwo
.
ist die vector dot product und|w|
ist die Größe des Vektorsw
( =sqrt(w . w)
). Wennw
ist ein Einheitsvektor, so wird diese einfachVerwendung des resultierenden Vektor als Ihre Kreatur Geschwindigkeit bedeutet Ihrem Wesen reist schnell, wenn es nur "Schürfwunden" die Wand, und langsam, wenn es trifft die Wand-fast tot-auf. (Dies ist, wie die meisten first-person-shooter-Spiele verwalten Sie Kollisionen für den menschlichen Spieler.)
Wenn Sie stattdessen möchten, dass Ihre Kreatur auf Reisen immer mit voller Geschwindigkeit, Sie müssen nur die Zeichen der
v . w
-- Sie werden immer auf Reisen, entweder in die Richtung der Wand Flächen (w
) oder in die entgegengesetzte Richtung (-w
).Das Problem, das Sie haben, ist, wenn deine Kreatur trifft auf die Wand tot-on. In diesem Fall das projizierte Vektor (0, 0), und Sie müssen einige andere Technik zu entscheiden, welchen Weg (
w
oder-w
) zu gehen. Der übliche Ansatz ist hier, Einen*, auch wenn dies vielleicht unnötig sein, wenn in Ihrer Umgebung besitzt genügend Struktur.Ich habe eine pathfinding-Algorithmus in C# eine Weile zurück
Hier ist der link
Können Sie versuchen, und verwenden Sie es als Ausgangspunkt, dh, Sie ändern könnte, die Funktion, die prüft, die nächste Zelle, um zu sehen, wenn es gültig ist, zu prüfen, für die Hindernisse, und man konnte Sie füttern es kleine Intervalle statt der Start-und end-Punkte, ein bisschen wie mehrere mini-pahfinding Routen.
(Der text ist in Spanisch, aber Sie können die Anwendung herunterladen aus dem link oben)