次のコード index = x*size*size + y * size + z を使用して 3D 配列を平坦化しました
しかし、インデックスからx、y、zインデックスを構築する方法がわかりません
これで別のスタックオーバーフローの質問を見つけましたが、これはうまくいきません。インディシスは常にオフです
次のコード index = x*size*size + y * size + z を使用して 3D 配列を平坦化しました
しかし、インデックスからx、y、zインデックスを構築する方法がわかりません
これで別のスタックオーバーフローの質問を見つけましたが、これはうまくいきません。インディシスは常にオフです
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;
}