Ich habe eine Wegsuche geschrieben. (Einige Hilfen habe ich aus anderen Beiträgen erhalten)
Jetzt bin ich dabei aus dem weg eine liste von sinnvollen waypoints zu erstellen.
Bisher arbeitet der algo 2-stufig:
0) wegsuche-->Jedes Feld auf dem Weg ist ein Waypoint
1) Waypoint 1 entfernen, wenn (x0-x1)*(y1-y2)=(x1-x2)*(y0-y1) ist -->Gerade in der 2D ebene (y=mx+n und "m" ist vom vorgängerpunkt zum punkt gleich dem "m" vom punkt zum nachfolger)
2) Erstelle Breesenham-Linie vom Vorgänger zum Nachfolger. Wenn keine nicht begehbaren Felder auf dem Weg sind-->Punkt entfernen
So weit so gut. Nur ist der Breesenham algo nicht so ganz dafür geeignet, da er oft die "wahl" hat erst 1 nach links dann eins nach unten oder umgedreht zu gehen (je nachdem von welcher seite aus man startet). Dadurch ergibt sich aber manchmal, dass er von der einen richtung nur begehbare felder und von der andren richtung ein nicht begehbares erwischt.
Außerdem können kleine hindernisse bei der waypoint-erzeugung vernachlässigt werden (z.b. das ende einer mauer. da kommt die einheit noch drumrum)
Als Bsp: die grafik im anhang:
schwarz=mauer
weis=frei
farbig=je 2 punkte die es zu verbinden gilt
rot:breesen ham sollte die 2 w. felder liefern: geht ohne zwischenpunkt
gelb: je nachdem von welcher seite man den breesenham beginne lässt geht der weg über das schwarze feld oder nicht, sollte aber ohne zwischenpunkt verbunden werden können
grün: mauerende im weg, algo sollte das als ende erkennen und direkten weg ermöglichen
blau: zu viel mauer dazwischen-->ein wegpunkt direkt über der mauer nötig
wie kann ich jetzt also diese aufgabe lösen?
meine bisher einzige idee wäre: wegsuche von vorgänger zum nachfolger starten (geht ja schnell, wegen geringer entfernung und ziel immer erreichbar) und gucken ob die anzahl der felder = abstand der punkte in x oder y richtung(je nachdem welche größer ist)
bei grün kommt dann raus: weg von 4 felder
abstand in x-richtung:4 -->OK; abstand in y: 4 -->OK
oder jemand ne bessere idee?
Moderiert von
Christian S.: Topic aus Sonstiges (Delphi) verschoben am Sa 04.04.2009 um 11:24