我使用以下代码索引 = x*size*size + y * size + z 展平了一个 3D 数组
但无法弄清楚如何从索引构建 x,y,z 索引
我发现了另一个stackoverflow问题,但这对我来说不起作用,标记总是关闭
我使用以下代码索引 = x*size*size + y * size + z 展平了一个 3D 数组
但无法弄清楚如何从索引构建 x,y,z 索引
我发现了另一个stackoverflow问题,但这对我来说不起作用,标记总是关闭
x = index / (size * size)
y = (index / size) % size
z = index % size
这是我将 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;
}