如何获得最近的自由点坐标?

时间:2013-11-11 16:46:16

标签: math language-agnostic

我有一个空间:

[.][.][.][.][.]
[.][.][.][.][.]
[.][.][x][.][.]
[.][.][.][.][.]
[.][.][.][.][.]

每个[.]代表2D空间中的一个点。 (需要它用于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)

是否有一些公式可以做到这一点?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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];
            }
        }
    }
}