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