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