5

次のコード index = x*size*size + y * size + z を使用して 3D 配列を平坦化しました

しかし、インデックスからx、y、zインデックスを構築する方法がわかりません

これで別のスタックオーバーフローの質問を見つけましたが、これはうまくいきません。インディシスは常にオフです

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 に答える