Эвристика * для создания линий Брезенхема

Из того, что я знаю об эвристике A * и о том, как работает алгоритм Брезенхема, это может быть невозможно, поскольку в эвристическую функцию передаются только текущее состояние и целевое состояние. Но, возможно, у кого-то есть умное решение этой проблемы.

Я использую A * для планирования пути в сетке, и мне нужна эвристика, которая заставит лучший путь следовать линии Брезенхема, когда между текущее состояние и цель или следующий поворот вокруг препятствия.

Вот несколько изображений, чтобы проиллюстрировать проблему.

Манхэттенское расстояние:

Если бы движения в мире действовали как шашки на сетке, это было бы все будет прекрасно, но в конечном итоге я собираюсь преобразовать путь A * в движения на непрерывной плоскости, так что это действительно работает очень хорошо.

The shortest path from red to green using the Manhattan distance heuristic

Евклидово расстояние:

Лучше, но все же не идеально. Обратите внимание на прямую линию в конце. Диагональ так же легко могла остаться диагональю, чего я хочу.

The shortest path from red to green using the Euclidian distance heuristic

Чего я хочу:

Линии Брезенхэма проводят к следующему повороту или цели.

The best path I actually want, which uses Bresenham lines to get to the goal

Я нашел здесь хороший ресурс, http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html , который касается того, что я ищу, но, похоже, работает только для рисования Брезенхэм линии от начала до ворот. Я хочу, чтобы линии Брезенхэма были нарисованы до следующего поворота вокруг препятствия.

Есть какие-нибудь идеи для хорошего подхода к этой проблеме?

14
задан peskal 23 April 2011 в 05:34
поделиться