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