Ich arbeite derzeit an der A * -Pfadfindung in einem Raster und möchte den generierten Pfad glätten, wobei ich auch das Ausmaß des Zeichens berücksichtige, das sich darauf bewegt. Ich verwende ein Raster für die Wegfindung, aber die Bewegung von Charakteren ist freies Roaming, keine strikte Bewegung von Kachel zu Kachel.
Um einen glatteren und effizienteren Pfad zu erzielen, führe ich Linienspuren in einem Raster durch, um festzustellen, ob sich zwischen den Kacheln nicht begehbare Kacheln befinden, um unnötige Ecken zu entfernen.
Da eine Linienverfolgung jedoch keine Ausdehnung aufweist, wird die Ausdehnung des Zeichens nicht berücksichtigt und es werden schlechte Ergebnisse erzielt (es werden keine nicht begehbaren Kacheln zurückgegeben, die nur von der Linie übersehen wurden, was zu unerwünschten Kollisionen führt).
Ich suche also nicht nach einem Linienalgorithmus, der die Kacheln darunter bestimmt, sondern nach einem, der die Kacheln unter einer kachelweiten Ausdehnungslinie bestimmt. Hier ist ein Bild, um mein Problem zu visualisieren!
Hat jemand irgendwelche Ideen? Ich habe mit Bresenhams Linie und anderen Alternativen gearbeitet, aber ich habe noch nicht herausgefunden, wie ich dieses spezielle Problem lösen kann.
quelle
Antworten:
Wie wäre es, wenn Sie von jeder Ecke der Kachel, auf der Sie sich befinden, eine Linie zu jeder Ecke der Kachel ziehen, zu der Sie gehen möchten. Sie können dies wahrscheinlich sogar auf 3 statt auf vier Zeilen optimieren. Würde dies nicht alle Kacheln auf dem Pfad korrekt erkennen?
Informationen zu glatteren Pfaden finden Sie in Artikeln zum Thema "Lenkverhalten", insbesondere in Artikeln, die es mit A * kombinieren, z. B. die folgenden Links:
quelle
Ich habe diesen Algorithmus gerade vor ein paar Tagen für ein Spiel von mir implementiert! (-8
Hier ist meine Idee in Bildform:
Beachten Sie, dass der Algorithmus mit Rechtecken beliebiger Größe arbeitet. Es basiert auf der Tatsache, dass eine Ecke des Rechtecks immer zuerst mit einer Gitterlinie kollidiert. Dies bedeutet, dass Sie nur einen Strahl verfolgen und alle benötigten Schnittpunkte erhalten können.
Hier ist der Algorithmus Schritt für Schritt:
Es gibt hier einige Randfälle, z. B. wenn der Strahl genau vertikal / horizontal ist oder wenn er genau auf eine Ecke trifft, aber sie sind nicht schwierig.
quelle
Dieses Verfahren ist eine Adaption von Bresenham, die die ursprüngliche Frage löst.
quelle