如何将1D阵列转换为3D阵列?

时间:2014-01-09 01:53:57

标签: java arrays

我有一个由4096(16 ^ 3)字节组成的文本文件,我需要加载并投入3D数组。每个字节代表16 ^ 3块中的瓦片ID,那么如何基于具有16个长度,宽度和深度的1D阵列创建3D阵列?我知道算法是这样的:

i = x + WIDTH * (y + HEIGHT * z);


z = Math.round(i / (WIDTH * HEIGHT));
y = Math.round((i - z * WIDTH * HEIGHT) / WIDTH);
x = i - WIDTH * (y + HEIGHT * z);

我怎么找到我?我不明白,考虑到我是计算x,y和z变量的变量。

2 个答案:

答案 0 :(得分:0)

你可以使用三个嵌套循环来完成它。使用您提供的第一个公式,从一组xyz转到1D数组中的相应索引,如下所示:

byte[] data = ... // Read 4096 bytes
byte[][][] res = new byte[16][16][16];
for (int x = 0 ; x != 16 ; x++) {
    for (int y = 0 ; y != 16 ; y++) {
        for (int z = 0 ; z != 16 ; z++) {
            res[x][y][z] = data[16*16*x + 16*y + z];
        }
    }
}

取决于数据的组织方式(例如,按层,然后按行,按列,按列,然后按图层,按行,按行,然后按列,再按图层等)。 )您可能需要在计算索引时将xyz的顺序切换为data数组。

答案 1 :(得分:0)

试试这个

    byte[][][] a = new byte[16][16][16];
    InputStream is = new FileInputStream("file");
    for(int i = 0; i < 16; i++) {
        for(int j = 0; j < 16; j++) {
            is.read(a[i][j]);
        }
    }

请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html