【问题标题】:Calculating 'Diagonal Distance' in 3 dimensions for A* path-finding heuristic为 A* 寻路启发式计算 3 维“对角距离”
【发布时间】:2019-04-06 13:47:10
【问题描述】:

我正在 3D 数据网格上运行 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 是北/东/南/西距离(例如 1m),D2 是对角线距离(例如 sqrt(2))

我不确定如何将其转换为 3 维 - 所以任何帮助将不胜感激

作为一个额外的问题(因为这实际上是多少网格......)假设 x 和 y 轴上的节点相距 5m,但 z 轴上相距 2m...那么公式将如何工作?

感谢您的帮助!

【问题讨论】:

  • 我的猜测是,沿对角线移动 3 直到 X、Y 或 Z 都正确,然后它会演变为 2D 问题(上图)。

标签: python path-finding a-star heuristics


【解决方案1】:

它可以相对容易地扩展到 3D。它确实需要找到 3 个值的“中间”,因为我们有最小值和最大值,所以有一个技巧。

dx = absdiff(node.x, goal.x)
dy = absdiff(node.y, goal.y)
dz = absdiff(node.z, goal.z)
dmin = min(dx, dy, dz)
dmax = max(dx, dy, dz)
dmid = dx + dy + dz - dmin - dmax

这适用于 Python 风格的整数,甚至适用于 Java 风格的 int,但对于浮点数,它可能会导致一些舍入。

像这样组合它们:

return (D3 - D2) * dmin + (D2 - D1) * dmid + D1 * dmax

【讨论】:

    【解决方案2】:

    我说的对吗?

    深度相机向我们展示物体的深度。 深度数据是距相机中心的对角线距离。 不是z轴距离是移动控制。 因此,它必须使用深度、像素 X 和像素 Y 进行计算。 我知道我们不知道的物理单位

    【讨论】:

    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2019-06-22
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多