Math 根据给定索引计算xyz位置

Math 根据给定索引计算xyz位置,math,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);

我不想从给定的索引计算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);
  }
intw=25;
int h=25;
int d=25;
int max=w*h*d;
对于(int i=0;i
设N(i)={0,1,…,i-1}

一种将一维映射到二维的方法 可以按以下方式从N(AB)映射到N(A)×N(B)

k&mapsto;(k/B,k%B)

k是一维索引,(k/B,k%B)是相应的二维索引

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

k&mapsto;(x,y)
0&mapsto;(0,0)
1&mapsto;(0,1)
2&mapsto;(1,0)
3&mapsto;(1,1)
4&mapsto;(2,0)
5&mapsto;(2,1)

一种使用合成将一维映射到三维的方法 现在,如果您想从N(ABC)映射到N(A)×N(B)×N(C),您可以使用上面的映射两次:一次从N(ABC)映射到N(A)×N(BC),然后再次从N(BC)映射到N(B)×N(C)

例子 对于A=B=C=2,这将为您提供以下映射

k&mapsto;(x,y,z)
0&mapsto;(0,0,0)
1&mapsto;(0,0,1)
2&mapsto;(0,1,0)
3&mapsto;(0,1,1)
4&mapsto;(1,0,0)
5&mapsto;(1,0,1)
6&mapsto;(1,1,0)
7&mapsto;(1,1,1)

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

一种将一维映射到二维的方法 可以按以下方式从N(AB)映射到N(A)×N(B)

k&mapsto;(k/B,k%B)

k是一维索引,(k/B,k%B)是相应的二维索引

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

k&mapsto;(x,y)
0&mapsto;(0,0)
1&mapsto;(0,1)
2&mapsto;(1,0)
3&mapsto;(1,1)
4&mapsto;(2,0)
5&mapsto;(2,1)

一种使用合成将一维映射到三维的方法 现在,如果您想从N(ABC)映射到N(A)×N(B)×N(C),您可以使用上面的映射两次:一次从N(ABC)映射到N(A)×N(BC),然后再次从N(BC)映射到N(B)×N(C)

例子 对于A=B=C=2,这将为您提供以下映射

k&mapsto;(x,y,z)
0&mapsto;(0,0,0)
1&mapsto;(0,0,1)
2&mapsto;(0,1,0)
3&mapsto;(0,1,1)
4&mapsto;(1,0,0)
5&mapsto;(1,0,1)
6&mapsto;(1,1,0)
7&mapsto;(1,1,1)

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

一种将一维映射到二维的方法 可以按以下方式从N(AB)映射到N(A)×N(B)

k&mapsto;(k/B,k%B)

k是一维索引,(k/B,k%B)是相应的二维索引

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

k&mapsto;(x,y)
0&mapsto;(0,0)
1&mapsto;(0,1)
2&mapsto;(1,0)
3&mapsto;(1,1)
4&mapsto;(2,0)
5&mapsto;(2,1)

一种使用合成将一维映射到三维的方法 现在,如果您想从N(ABC)映射到N(A)×N(B)×N(C),您可以使用上面的映射两次:一次从N(ABC)映射到N(A)×N(BC),然后再次从N(BC)映射到N(B)×N(C)

例子 对于A=B=C=2,这将为您提供以下映射

k&mapsto;(x,y,z)
0&mapsto;(0,0,0)
1&mapsto;(0,0,1)
2&mapsto;(0,1,0)
3&mapsto;(0,1,1)
4&mapsto;(1,0,0)
5&mapsto;(1,0,1)
6&mapsto;(1,1,0)
7&mapsto;(1,1,1)

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

一种将一维映射到二维的方法 可以按以下方式从N(AB)映射到N(A)×N(B)

k&mapsto;(k/B,k%B)

k是一维索引,(k/B,k%B)是相应的二维索引

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

k&mapsto;(x,y)
0&mapsto;(0,0)
1&mapsto;(0,1)
2&mapsto;(1,0)
3&mapsto;(1,1)
4&mapsto;(2,0)
5&mapsto;(2,1)

一种使用合成将一维映射到三维的方法 现在,如果您想从N(ABC)映射到N(A)×N(B)×N(C),您可以使用上面的映射两次:一次从N(ABC)映射到N(A)×N(BC),然后再次从N(BC)映射到N(B)×N(C)

例子 对于A=B=C=2,这将为您提供以下映射

k&mapsto;(x,y,z)
0&mapsto;(0,0,0)
1&mapsto;(0,0,1)
2&mapsto;(0,1,0)
3&mapsto;(0,1,1)
4&mapsto;(1,0,0)
5&mapsto;(1,0,1)
6&mapsto;(1,1,0)

7&mapsto;(1,1,1)

这在书面上没有意义。您是否试图在一维数组中描述三维矩阵?三维框中的所有位置。如果您希望获得给定w、h、D框中的所有位置,则只需执行3个嵌套循环,每个循环的测试条件都小于w、h或D。不需要计算最大值,对吗?我不能使用3个循环。是的,我可以将结果存储在一个数组中,但这太过分了。这没有写出来的意义。您是否试图在一维数组中描述三维矩阵?三维框中的所有位置。如果您希望获得给定w、h、D框中的所有位置,则只需执行3个嵌套循环,每个循环的测试条件都小于w、h或D。不需要计算最大值,对吗?我不能使用3个循环。是的,我可以将结果存储在一个数组中,但这太过分了。这没有写出来的意义。您是否试图在一维数组中描述三维矩阵?三维框中的所有位置。如果您希望获得给定w、h、D框中的所有位置,则只需执行3个嵌套循环,每个循环的测试条件都小于w、h或D。没有
// 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)