5
for (int ix = x - r; ix < x + r + 1; ix++) {
    for (int iz = z - r; iz < z + r + 1; iz++) {
        for (int iy = y - r; iy < y + r + 1; iy++) {
                       // if ix,iy,iz = something blah blah (this part isn't needed)
        }                           
    }
}

好的,现在问题来了。上面的当前代码获取 x、y、z 和 r(范围)。它的工作是通过“立方体”进行引用,直到满足我设置的某个条件。问题在于它从立方体的外侧开始,基本上从一个角到另一个角。

我正在寻找一种方法(我的数学/java 不喜欢我 atm)从一个 pos 开始并从该 pos(包括 pos 本身)向外循环,直到它到达立方体的最外层边界。

所以如果我们给所有的东西都是假值,让我们使用 x = 5, y = 5, z = 5, r = 2 代码应该检查 5,5,5 - 4,5,5 6,5,5 5,6,5 5,4,5 等基本上从中心向外迭代每一件事。

该命令称为 FindNearest,但从技术上讲,它的作用类似于 FindFurthest atm。

我希望我提供了足够的细节,并且希望有人可以向我扔一些片段或工作代码,因为这在最后一个小时左右令人沮丧。我不想在 for 循环或类似的随机东西中间进行 10 个 if 检查,我正在寻找一种干净的方式来执行此操作。

4

1 回答 1

3

您可以通过执行以下操作从中心迭代:

for (ix = x, xsign = 1, xstep = 1; 
     (ix >= x - r) && (ix <= x + r);
     ix += xsign * xstep, xsign = -xsign, xstep++)

因此ix,对于您的示例,将从 5 到 6 到 4 到 7 等等。您可以像这样嵌套循环,至少如果我正确理解了这个问题,您会得到您想要的。

于 2012-02-26T01:27:21.180 回答