0

我有一个空间:

[.][.][.][.][.]
[.][.][.][.][.]
[.][.][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)

有什么公式可以做到这一点吗?

4

2 回答 2

0

你问距离公式吗?不确定我是否理解这个问题,但是坐标为 (x1,y1,z1) 和 (x2,y2,z2) 的两点之间的距离是:

距离 = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)

于 2013-11-11T16:50:23.870 回答
0

我不熟悉 Ruby,但在 C++ 中,您可能会执行以下操作:

for(int x=(radius*-1); x<=radius; ++x) {
    for(int y=(radius*-1); y<=radius; ++y) {
        for(int z=(radius*-1); z<=radius; ++z) {
            if(x==0 && y==0 && z==0) {
                continue;
            } else {
                //check location[x,y,z];
            }
        }
    }
}
于 2013-11-11T16:52:39.903 回答