AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

A* Pathfinding

Ein Thema von Airblader · begonnen am 22. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#1

A* Pathfinding

  Alt 22. Nov 2005, 13:14
Hi
Ja, ich habe bereits gesucht und bin hier durch die DP-Suche auch fündig geworden

Ich habe eig. nur 2 Fragen:

1)
Hab ich das jetzt so richtig verstanden (habs mir mal selber auf Deutsch aufgeschrieben)?

Zitat:
http://nopaste.php-q.net/173975

--- Der Übersicht halber den Text ins No-Paste geschoben ---
Und wenn ja,

2) Ist es hier auch am besten wirklich TList zu verwenden? Evtl. jmd mit Erfahrungen?
Das ganze soll nämlich logischerweise auch schnell berechnet werden und die Position d. Zielpunktes kann sich immer verändern

air
Edit:
Also das ist die Zusammenfassung die es dort auch gibt.
Das mit der Open/Closed List ist mir - denke ich - klar
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: A* Pathfinding

  Alt 22. Nov 2005, 13:50
also wenn ich das richtig verstehe sollte es passen...

aber du kannst noch überlegen, ob du wirklich alle 8 Felder prüfen musst...

von einem kommst du ja her....
Mache sind ja nicht begehbar... (somst wäre die wegfindung sinnlos...)

aber sonst...
ich persönlich würde die daten offscreen verwalten... mit ner TObjectList und dann postitions-objekte reinlegen...

aber das ist geschmackssache ^^

cya
Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#3

Re: A* Pathfinding

  Alt 22. Nov 2005, 13:58
Die wichtigste Frage die sich mir stellt ist vor allem, was die beste Performance hat
Wie ich z.b. noch den H-Wert berechnen soll ist eine Frage, die sich zwar lösen lässt, aber bei der man drauf achten muss, wie man es macht.
Meine Idee wäre da z.B.:

Ich habe (X1/Y1) - die Koord. des Startpunktes.
Außerdem habe ich (X2/Y2), die Koord. des Zielpunktes.

Das Ergebnis wäre also eine Strecke von (X1-X2 / Y1-Y2) = (X3/Y3), wobei natürlich ein positives Ergebnis
rauskommen muss (sprich abs()).

Der H-Wert wäre dann also X3+Y3, oder?

--------------------------------

Edit
Bei TObjectList hätte ich noch ein Problem:
Kann ich anstatt TObject bei den Items auch eine eigene Klasse verwenden? (Ich muss ja irgendwo den F-,G- und H-Wert zwischenspeichern ).
Ich kann zwar eine Klasse erzeugen von TObject aber TObjectList will ja ein TObject - vllt. bin ich aber grad auch zu durcheinander und vergess was *fg*

Edit2:
Ok..hat sich glaube ich erledigt die Frage

Edit3:
Ich muss doch umsteigen, da ich ja Sublisten brauche, die wieder Sublisten haben, ...

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#4

Re: A* Pathfinding

  Alt 23. Nov 2005, 14:15
*push*

Mir stellt sich jetzt eine ganz elementare Frage.
Ich hab begonnen, bin mir aber nichtmehr ganz so sicher, ob das so die beste Idee ist.

Wie würdet ihr an die Sache rangehen?
Ich hab versucht das in eine Klasse zu kapseln. Dann hab ich mir 2 Laufzeit-TreeViews angelegt für die Listen und eben einen record als Pointer auf einen record für die Daten (in TTreeNode.Data wird das abgelegt).

Ich frage mich, ob eine Klasse aber so sinnvoll ist, da es eig. keinen großen Vorteil bietet in dem Fall, oder?


Also nochmal konkret: Wie würdet ihr das in etwa lösen (auch von wegen Performance).

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: A* Pathfinding

  Alt 23. Nov 2005, 14:53
hmm

tja die performance...

also ich würde das "spiel"-feld einmal komplett vorberechnen...
Soll heißen ein array anlegen, mit den daten die du schon hast:
z.b. x & y kooerdinate, ob begehbar oder nicht usw.

in das array schickst du dann die rotine rein.

Am besten kann man dann wohl mit nem pointer auf die einzelnden felder zugreifen. (schönn flink)
...
Ich persönlich würde es weitestgehend vermeiden zur berechnung visuelle komponenten zu benuzten... d.h. ein treeView ist zwar ganz hübsch und vielleicht auch bunt. Aber jedes ändern in dem teil kostet verdammt viel zeit. (Immer wieder neu zeichnen usw.)

Also am besten alles offscreen machen und dann das fertige anzeigen...
Da das ganze ja an sich gesehen nicht viel tun muss sollte das recht flink sein.
Was man auch gut einbauen kann, ist beim vergleich der kosten der felder quicksort zu benutzen.

Erst die felder raus schmeißen, die nicht mehr in frage kommen...
Blockiert oder ned... Kommt man von dort... bzw war man schon mal da...

dann dieses kleine pointer array mit den potenziellen kandidaten, sofern es einen gibt, per quicksort durchrattern...
Das oberste abschöpfen, weil der ja dann der mit den niedrigsten kosten wäre...
Den start-pointer von oben wieder verbiegen (auf das neue "ausgangsfeld") und das ganze dann wieder von neuem...

sollte also an sich nicht soo zeit aufwendig sein...
habe das zwar noch nie gebaut...
aber ist glaube ich recht performant zu lösen...

Ich hoffe meine paar stichworte helfen dir ein bissel weiter...
vielleicht fehlt hier und da mal ein verb... bin gerade zu faul darüber nach zu denken... ^^

cya
Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#6

Re: A* Pathfinding

  Alt 23. Nov 2005, 14:58
Das Spielfeldarray hab ich vorliegen
Ich hab TreeView auch nicht visuell benützt sondern zur Laufzeit erzeugt - ich weiß, dass es nicht optimal ist, darum frage ich ja *fg*
Aber was soll ich sonst nehmen (wo ich auch Sublisten hab)?

Sooo aufwenidg dürfte es eh nicht werden, da die Routine erst eingesetzt wird, wenn sich der Player in einem gedachten Kreis des NPCs befindet (dafür dann aber recht oft...).


air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#7

Re: A* Pathfinding

  Alt 24. Nov 2005, 18:08
*leider nochmal pushen tut*
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: A* Pathfinding

  Alt 24. Nov 2005, 18:27
Ich würde kein TTreeView benutzen, wenn er nicht angezeigt werden soll. Bau die Baumstruktur lieber gleich in deine Klasse ein, dann hast du auch kein Pointer-Gefummel .
Delphi-Quellcode:
type
  TNode = class
  private
    FChildNodes: TObjectList; // oder ein Array, hab mich jetzt nicht mit dem Algorithmus auseinandergesetzt
  [...]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#9

Re: A* Pathfinding

  Alt 24. Nov 2005, 18:34
Mhm und dann als Objekte für die ObjectList wiederum TNode?
Klingt schlau *fg*


Werd ich mir mal genauer anschauen, leider grad keine Zeit, aber Danke schonmal
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: A* Pathfinding

  Alt 24. Nov 2005, 19:53
Ick stell mich jetz mal ganz dumm und frage: Du hast einen (gerichteten) Graphen und willst einen Weg von a nach b finden? Oder den Kürzesten? Und Du brauchst eine geeignete Datenstruktur? Sehe ich das richtig?
If Antwort = Nein Then ClickWeg Ansonsten hilft hier die 'mathematische' Definition eines Graphen. Das ist ein Tupel, bestehend aus Knoten (Nodes) und Kanten (Edges). Knoten könnten man einfach als Zahlen von 0...N-1 definieren. Die Kanten als Matrix E [0..N-1,0..N-1]. E[i,j] beschreibt dann die Entfernung, um von i nach j zu gelangen, also die 'Länge' der Kante von i nach j. Ein Wert von +Maxint würde z.B. bedeuten, das man gar nicht direkt von i nach j gelangen kann. Achtung: Wir definieren hier wirklich nur die Kanten des Graphen, also nicht Wege über diverse Knoten.

Damit kann man dann sehr schnell arbeiten. Ein Weg von i nach j würde z.B. als ein Array of Integer definiert. Ein Weg von Knoten #1 zum Knoten #5 würde z.B. so aussehen: [1,2,8,5]. Ich komme also von 1 über 2 und 8 nach 5.

Ich kenne den A*-Algorithmus leider nicht, und ich schäme mich dafür, weil es zur Allgemeinbildung gehört, sonst könnte ich Dir hier besser helfen. Ich weiss nur, das der A* der derzeit beste Algorithmus ist, um das Problem des 'shortest Path' zu lösen. Es gibt aber noch recht einfache Alternativen...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz