include(PUN_ROOT.'syn/css.php'); ?>
Sie sind nicht angemeldet.
Tja, wie der Name schon sagt eine A* Wegfind-Klasse.
Einfach einbinden und TPathfinder steht als Klasse zur verfügung.
procedure LoadFromBMPFast(filename : string; toleranz : integer);
und schon wird ein Terrain aus einem Bitmap geladen und in die Klasse mit eingebunden. (Sehr praktisch für Heightmaps)
Toleranz ist der max. Wert (=Höenunterschied) bei dem der Punkt als nicht begehbar definiert wird.
function getPathAB(const a,b : TPoint) : TNodeList;
Gibt ein Array of TPoint zurück in dem die einzelnen Wegpunkte stehen.
bei Fragen helfe ich gerne.
mfg Chris
Offline
A* is cool :blues:
Sieht aber relativ rudimentär aus Hast du mal die performance getestet? IMO kann diese implementierung nicht sonderlich schnell sein *duck* Das suchen in der openList ist soo relativ ungesund.
Mein A* sah am anfang ähnlich aus (wenn auch mit entkoppeltem kanten-bewertungs-callback) und ich konnte ihn min. um den faktor 10 beschleunigen, bzw. die komplexitätsstufe verringern.
Ich hab leider die links nicht mehr aber zu A* gibts haufenweise gute optimierungs ratschläge.
Offline
ne extrem schnell is der natürlich nicht.
Binäre Bäume kann man natürlich noch verwenden.
Vorallem is der sehr langsam wenn man versucht nen unmöglichen weg zu finden. Das könnte man noch die 'FloodFill' methode einbauen.
Aber für meine momentanen Zwecke reicht es (noch).
und zum verstehen von A* ist die Klasse auch ganz gut, weil wirklich nur die basics enthalten sind.
zur performance:
512x512 Map: ca. 0.001 sec. (Athlon 1800 MHz. 1GB RAM)
mfg Chris
Offline
Zitat:
ne..zur performance:
512x512 Map: ca. 0.001 sec. (Athlon 1800 MHz. 1GB RAM)
das sagt so erstmal nix: nur wenn du von a(0,0) nach b(511,511) getestet hast.
Aber hast schon recht; so lange man keine echtzeigberechnung braucht, is die geschwindigkeit bei solchen werten nicht allzu wichtig.
Offline