从给定的索引计算xyz位置

时间:2015-02-24 14:24:13

标签: math

我不想从给定的索引计算xyz位置。 我很亲密,但还没有。 有人可以帮助我,我想只有我的z是错的。

  int w = 25;
  int h = 25;
  int d = 25;

  int max = w*h*d;

  for(int i = 0; i < max; i++) {
    int x = i % w;
    int y = ((i - x) / w)/d;
    int z = ((i - y) / w) / d ;

    println(x, y, z);
  }

1 个答案:

答案 0 :(得分:3)

设N(i)= {0,1,...,i - 1}。

将1-D映射到2-D

的方法

您可以通过以下方式从N(AB)映射到N(A)×N(B)。

k↦(k / B,k%B)

k是1-D指数,(k / B,k%B)是相应的2-D指数。

实施例

例如,假设您要从{0,1,2,3,4,5}映射到{0,1,2}×{0,1}。
然后A = 3,B = 2,你得到以下映射。

k↦(x,y)
0↦(0,0)
1↦(0,1)
2↦(1,0)
3↦(1,1)
4↦(2,0)
5↦(2,1)

使用合成

将1-D映射到3-D的方法

现在,如果你想从N(ABC)映射到N(A)×N(B)×N(C),你可以使用上面的映射两次:一次从N(ABC)映射到N(A)×N(BC)然后再次从N(BC)映射到N(B)×N(C)。

// Input: k in N(ABC)
// Output: (x, y, z) in N(A) x N(B) x N(C)

// N(ABC) -> N(A) x N(BC)
x = k / (B * C)   // x in N(A)
w = k % (B * C)   // w in N(BC)

// N(BC) -> N(B) x N(C)
y = w / C         // y in N(B)
z = w % C         // z in N(C)

实施例

对于A = B = C = 2,这将给出以下映射。

k↦(x,y,z)
0↦(0,0,0)
1↦(0,0,1)
2↦(0,1,0)
3↦(0,1,1)
4↦(1,0,0)
5↦(1,0,1)
6↦(1,1,0)
7↦(1,1,1)

相关问题