我有一个空间:
[.][.][.][.][.]
[.][.][.][.][.]
[.][.][x][.][.]
[.][.][.][.][.]
[.][.][.][.][.]
每个[.]
代表二维空间中的一个点。(需要 3D,但现在没关系)我标记了
“[x]
当前位置”(假设它是 [0, 0, 0])
所以我需要找到最近的“不忙”点的位置。
例如,如果我有这样的区域:
[.][.][.][.][.]
[.][b][b][b][.]
[.][b][x][.][.]
[.][b][b][b][.]
[.][.][.][.][.]
([b]
对于“忙”)
然后我需要得到一个结果 (x: 0, y: 1, z: 0) (因为它是最接近免费的)。
现在考虑做这样的事情:
current_location = {x: 0, y: 0, z: 0}
radius = 0
closest_record = nil
begin
radius = radius + 1
# some way to iterate over each [x, y, z] spot within that radius until
# closest_record = Record.where(x: x1, y: y1, z: z1).first returns nil (meaning it's free)
end until record.present?
# (that's Ruby syntax, but doesn't matter really)
有什么公式可以做到这一点吗?