1D索引转换为3D坐标

6
我使用以下代码压缩了一个三维数组: index = x*size*size + y * size + z
但我无法从索引中构建x、y、z的值。
我在stackoverflow上找到了另一个类似的问题,但对我没有用。指数总是有误。

1
这个回答对你有帮助吗?https://dev59.com/kmbWa4cB1Zd3GeqPV133#11587049 - Daniel Fischer
2个回答

11
x = index / (size * size)
y = (index / size) % size
z = index % size

3
以下是将3D坐标转换为平面坐标和将平面坐标转换回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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接