Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Dooku

unregistriert

1

29.07.2013, 21:03

Pathfinding basierend auf bewegungsgetreuen Wendekreisen

Hi,
ich verwende in meinem Spiel ein Raster, um Objekte die sich in der game.world befinden einfacher darzustellen. Anhand dieses Rasters soll jetzt der schnellste Weg vom derzeitigen Aufenthaltspunkt eines Agenten zu einem vorher bestimmten Ziel ermittelt werden. Problem: Der Agent kann sich nur entweder geradeaus bewegen oder mit festen "Wenderadius" nach links oder rechts lenken.
Die Lösung hatte ich mir so vorgestellt: Die Strecke wird in mehre Abschnitte unterteilt, auf denen der Agent entweder lenken oder geradeaus fahren muss. Diese Abschnitte werden durch Waypoints begrenzt.
Ich suche jetzt also einen Algorithmus der die kürzeste Strecke zwischen Origin und Destination findet und diese anhand von Waypoints, gekoppelt mit "Lenkkomandos", speichert und so für der Agenten verwertbar macht. Allerdings werde ich wahrscheinlich nicht der Erste sein, der mit einem solchen Problem konfrontiert wurde.. Welche Lösungsmöglichkeiten würden sich hier anbieten?

Mfg Dooku

PS: Anbei ein Beispiel (schwar sind zuvermeidende Hindernisse; die türkis-gestrichelte Linie stellt ungefähr den gewünschten Verlauf des Agenten da..)
»Dooku« hat folgendes Bild angehängt:
  • curved_pathfanding.png

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

2

30.07.2013, 07:42

Gute Stichworte kann ich Dir da nicht nennen - probier's höchstens mal mit "Steering" in Zusammenhang mit "Pathfinding". Ganz laienhaft würde ich erstmal einen Flood Fill bauen, in kleinen Zeitschritten einen Baum von Bewegungsmöglichkeiten aufbaut, indem er von jeder Startposition aus die drei Basismöglichkeiten "geradeaus", "voll links" und "voll rechts" durchrechnet. Das wird ziemlich fix ein großer Baum, glaube ich, aber auf dem könnte man dann wieder ganz plump die A*-Heuristik anwenden.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

30.07.2013, 09:35

Solltest du C# können, kannst du dir mal den Code von http://arongranberg.com/astar/features anschauen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

4

30.07.2013, 09:44

Ganz laienhaft würde ich erstmal einen Flood Fill bauen, in kleinen Zeitschritten einen Baum von Bewegungsmöglichkeiten aufbaut, indem er von jeder Startposition aus die drei Basismöglichkeiten "geradeaus", "voll links" und "voll rechts" durchrechnet. Das wird ziemlich fix ein großer Baum, glaube ich, aber auf dem könnte man dann wieder ganz plump die A*-Heuristik anwenden.
Japp, genauso macht man das. Ist ja im Prinzip komplett analog zu dem Fall wo man sagt, ich geh ein Feld nach oben, unten, links oder rechts.

Dooku

unregistriert

5

30.07.2013, 20:38

Zitat von »Schrompf«
Ganz laienhaft würde ich erstmal einen Flood Fill bauen, in kleinen Zeitschritten einen Baum von Bewegungsmöglichkeiten aufbaut, indem er von jeder Startposition aus die drei Basismöglichkeiten "geradeaus", "voll links" und "voll rechts" durchrechnet. Das wird ziemlich fix ein großer Baum, glaube ich, aber auf dem könnte man dann wieder ganz plump die A*-Heuristik anwenden.

Japp, genauso macht man das. Ist ja im Prinzip komplett analog zu dem Fall wo man sagt, ich geh ein Feld nach oben, unten, links oder rechts.
Das wage ich jetzt einfach mal zu bezweifeln. Folgendes Szenario:
Angenommen der Agent befände sich ganz am linken Rand des Spielfeldes. Das Ziel ist auf gleicher Höhe in das letzte Raster am rechten Rand gesteckt. Der Agent muss nur geradeaus nach Rechts "fahren", da keine Hindernisse auf der Strecke liegen.
Das Raster ist 100 Einheiten breit. Damit ein Agent jede Einheit im Raster erreichen kann, darf der Alg. das Raster also max. mit der Länge einer Einheit "abtasten" (Abtastung -> neue Ebene zum Baum hinzufügen). Bei 100 Einheiten die es zu überwinden gilt, läuft diese Abtastung also mindestens 100 mal. Pro Durchlauf (eine Abtastung) wird die Anzahl der Knoten mit 3 multipliziert -> Für die Anzahl der Knoten N_A in Abhängigkeit der Anzahl der Durchläufe n ergibt sich also grob N_A(n) = 3^n. Für das gewählte Beispiel ergeben sich somit zunächst ~5*10^47 Knoten.
Natürlich fallen da noch alle Knoten weg die außerhalb des Rasters liegen oder auf gleichartige fallen würden. Trotzdem ist allein diese Menge von Knoten (ohne Kanten) schlichtweg zu gigantisch....
Kommentare ? :D

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

30.07.2013, 20:57

Warum benutzt du dann keinen A* oder eine Abwandlung davon?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

7

30.07.2013, 21:00

Das hat mich spontan an ein Video von Sechsta Sinn erinnert: http://www.youtube.com/watch?v=4X1FbVcTTHM

Vielleicht kannst du bei denen Anfragen wie es implementiert wurde.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

8

30.07.2013, 21:46

Kommentare ? :D


Lies vollständig, speziell den Hinweis auf A*, und probiere es aus, bevor Du lästerst.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

9

31.07.2013, 08:18

Natürlich fallen da noch alle Knoten weg die außerhalb des Rasters liegen oder auf gleichartige fallen würden. Trotzdem ist allein diese Menge von Knoten (ohne Kanten) schlichtweg zu gigantisch....
Kommentare ?
Ja gigantisch viele. Und wenn du das mit Feldern machst, sind es sogar noch mehr. Da hast du dann immer 4 Moeglichkeiten, also ist der Baum dann 4^n. Es gibt nunmal ziemlich viele moegliche Wege, um nicht zu sagen unendlich...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

31.07.2013, 12:05

Dieses Paper hier sieht sehr interessant aus:
http://www.cs.cmu.edu/~motionplanning/re…kevehicle-1.pdf

Da wird eigentlich genau das beschrieben.

Werbeanzeige