5

我使用以下代码索引 = x*size*size + y * size + z 展平了一个 3D 数组

但无法弄清楚如何从索引构建 x,y,z 索引

我发现了另一个stackoverflow问题,但这对我来说不起作用,标记总是关闭

4

2 回答 2

11
x = index / (size * size)
y = (index / size) % size
z = index % size
于 2012-07-29T20:54:59.677 回答
2

这是我将 3D 坐标来回转换为展平坐标的函数。

我已经在一定程度上对它们进行了测试,所以它们应该可以完成这项工作。这些函数在 C++ 中,但由于它们主要是关于数学的,因此与任何其他语言的差异很小:)

inline CL_UINT getCellIndex(CL_UINT ix, CL_UINT iy, CL_UINT iz,
                            CL_UINT rx, CL_UINT ry, CL_UINT rz)
{
    return iz * rx * ry + iy * rx + ix;
}

inline CL_UINT3 getCellRefFromIndex(CL_UINT idx,CL_UINT rx, 
                                    CL_UINT ry,CL_UINT rz)
{
    CL_UINT3 result;
    CL_UINT a = (rx * ry);
    result.z = idx / a;
    CL_UINT b = idx - a * result.z;
    result.y = b / rx;
    result.x = b % rx;
    return result;
}
于 2016-04-04T07:35:02.157 回答