通过最近的3维向量迭代

时间:2014-08-16 23:39:53

标签: arrays loops vector nearest-neighbor

我有一个3维数组,如int [256] [256] [256]。现在我在这个数组中有一个特定的点,如182,12,194。我需要迭代最近的邻居,按照欧几里得距离排序到这一点。例如:

182,12,194它将迭代如下:

  • 182,12,194 + [0,0,0]
  • 183,12,194 + [1,0,0]
  • 182,13,194 + [0,1,0]
  • 182,12,195 + [0,0,1]
  • 181,12,194 + [ - 1,0,0]
  • 182,11,194 + [0,-1,0]
  • 182,12,193 + [0,0,-1]
  • 183,13,194 + [1,1,0]
  • 183,12,195 + [1,0,1]
  • 182,13,195 + [0,1,1]

等等。

实现这一目标的最简单方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你只有3个维度,那么你可以用3个嵌套循环来完成:

void iterate(int x, int y, int z) {
    int r = 1;
    for (int dx=-r; dx<=r; dx++) {
        for (int dy=-r; dy<=r; dy++) {
            for (int dz=-r; dz<=r; dz++) {
                array[x+dx][y+dy][z+dz] = ...
            }
        }
    }
}

r代表&#34; radius&#34;,对于你勾画的情况,这是1。

对于更高(或可变数量)的维度,需要一些更复杂的解决方案。