簡體   English   中英

為 A* 尋路啟發式計算 3 維中的“對角線距離”

[英]Calculating 'Diagonal Distance' in 3 dimensions for A* path-finding heuristic

我正在 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......那么公式將如何工作?

謝謝你的幫助!

它可以相對容易地擴展到 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

我對嗎?

深度相機向我們展示物體的深度。 深度數據是距相機中心的對角線距離。 它不是移動控制的 z 軸距離。 因此,它必須使用深度、像素 X 和像素 Y 進行計算。我知道我們不知道

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM