Я бегу A * Поиск пути по трехмерной сетке данных. Доступные перемещения - это 26 окружающих узлов (то есть вы можете перемещаться по диагонали). Я использовал евклидово расстояние в качестве эвристики, и это работает хорошо, но я также хотел бы попробовать «диагональное расстояние», чтобы увидеть, как это работает (и если есть любой прирост скорости)
Я нашел некоторую логику в Интернете, чтобы сделать это в двух измерениях ...
function heuristic(node) =
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return D * (dx + dy) + (D2 - 2 * D) * min(dx, dy)
.., где D - расстояние север / восток / юг / запад (например, 1 м), а D2 - диагональное расстояние (например, sqrt (2))
Я не совсем уверен, как преобразовать это в 3 измерения - поэтому любая помощь будет принята с благодарностью
В качестве дополнительного вопроса (поскольку это то, сколько сетки в действительности ...) предположим, что узлы на оси x и y находятся на расстоянии 5 м друг от друга, но на расстоянии 2 м друг от друга на оси z ... как тогда будет работать формула?
Спасибо за любую помощь!