I have sample code which converts 3d coordinate to id(index) and reverse. How can i do this for N Dimentional(for example 5d and 6d) array? here is the 3d conversion code :
inline NoximCoord id2Coord(int id) {
NoximCoord coord;
coord.z = id / (NoximGlobalParams::mesh_dim_x *
NoximGlobalParams::mesh_dim_y); ////
coord.y = (id - coord.z * NoximGlobalParams::mesh_dim_x *
NoximGlobalParams::mesh_dim_y) /
NoximGlobalParams::mesh_dim_x;
coord.x = (id - coord.z * NoximGlobalParams::mesh_dim_x *
NoximGlobalParams::mesh_dim_y) %
NoximGlobalParams::mesh_dim_x;
assert(coord.x < NoximGlobalParams::mesh_dim_x);
assert(coord.y < NoximGlobalParams::mesh_dim_y);
assert(coord.z < NoximGlobalParams::mesh_dim_z);
return coord;
}
inline int coord2Id(const NoximCoord &coord) {
int id =
coord.z * NoximGlobalParams::mesh_dim_x * NoximGlobalParams::mesh_dim_y +
(coord.y * NoximGlobalParams::mesh_dim_x) + coord.x;
assert(id < NoximGlobalParams::mesh_dim_x * NoximGlobalParams::mesh_dim_y *
NoximGlobalParams::mesh_dim_z);
return id;
}
I need the conversion in this way (c++ <14)not the ways implemented on other answers.
x,yandzincoordandmesh_dimwith index0-2and look for a pattern. You need a loop for all dimensions and a loop in each dimension to calculate the value.