Из того, что я понимаю об эвристике A * и о том, как работает алгоритм Брезенхэма, это может оказаться невозможным, поскольку только эвристическая функция передается только текущему состоянию и состоянию цели.Но, возможно, у кого-то есть умное решение этой проблемы.
Я использую A * для планирования пути на сетке, и я хотел бы эвристику, которая позволила бы наилучшему пути следовать по линии Брезенхэма, когда естьсвободное пространство между текущим состоянием и целью или следующим поворотом вокруг препятствия.
Вот несколько изображений, иллюстрирующих проблему.
Манхэттенское расстояние:
Если бы движения в мире действовали как шашки на сетке, это было бы прекрасно, но я в конечном итоге собираюсь преобразовать путь A * в движения на непрерывной плоскости, так что это работает очень хорошо.
Евклидово расстояние:
Лучше, но все же не идеально.Обратите внимание на прямую линию в конце.Диагональ так же легко могла бы остаться диагональю, чего я и хочу.
Что я хочу:
линии Брезенхэманичья к следующему ходу или цели.
Я нашел хороший ресурс здесь, http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html, который касается того, что я ищу, но только кажется, чторабота для рисования линий Брезенхема от начала до цели.Чего я хочу, так это чтобы линии Брезенхама проходили к следующему повороту и вокруг препятствия.
Есть какие-нибудь идеи для хорошего подхода к этой проблеме?