我需要一个支持负指数的三维数组。 类似于boost :: multi_array的东西,我可以为每个维度指定边界,即:
int xMin = -5; int xMax = 7;
int yMin = 3; int yMax = 10;
int zMin = -8; int zMax = -2;
SuperArray<float> ar;
ar.setBounds(xMin, xMax, yMin, yMax, zMin, zMax);
ar[-3][5][-5] = 1.0f;
基本上,它是3D中的索引体素子空间:) 有没有什么可以做到的,或者我自己创造这个? 谢谢!
答案 0 :(得分:1)
为什么不进行翻译?
让我们说数组大小是:
d1 = 100
d2 = 100
d3 = 100
[d1][d2][d3]
// where index 0 = -50 and index 99 = 50
//Pseudo code
// x = -1; y = 2; z = 2;
value = array[d1/2+x][d2/2 + y][d3/2 +z];
答案 1 :(得分:0)
将每个维度的大小设置为Max-Min
。然后,当您想要访问数组元素时,将-Min
添加到每个索引。因此,对于您的尺寸,您将声明:
float ar[12][7][6];
然后,要访问所需的元素,您可以:
ar[-3-(-5)][5-3][-5-(-8)] = 1.0f;
你应该能够编写一个隐藏所有这些转换的类(这是Boost库正在做的事情)。