Неизведанные узлы с A* JPS (поиск точек перехода)

Я работаю над реализацией A* JPS (точка поиска перехода), и хотя я понял ее основы, кажется, что я все еще упускаю момент.

Вот попытка (см. прикрепленное изображение), пытающаяся найти путь между начальным узлом (обозначенным S) и целевым узлом (отмечен G). Ячейки с черной шахматной доской — это исследуемые узлы, а белые со стрелкой — точки перехода (с соответствующим направлением). Все ячейки имеют стоимость перемещения 1, кроме синих, которые являются препятствиями.

Однако, как вы можете видеть, некоторые области не исследованы, и поэтому он не может найти целевой узел, хотя путь существует. Кажется, это вызвано тем, что он не исследует по диагонали некоторые точки прыжка, но, насколько я понял, мы должны учитывать только текущее направление (т.е. следовать стрелкам на картинке).

Итак, мой вопрос: что не так в этой попытке? Я пропустил точки перехода или неправильно понял, как это работает?

Прикрепленное изображение: попытка A* JPS (пока не удается встроить изображение: П)

Спасибо за ваши ответы.

Линейные (как по вертикали, так и по горизонтали, но не по диагонали) принудительные соседи отсутствовали. ср. рисунок 2 поста BlueRaja


person Lowlight    schedule 19.07.2017    source источник


Ответы (1)


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

См. рисунки 2 и 3 здесь.

Вынужденные соседи

person BlueRaja - Danny Pflughoeft    schedule 19.07.2017