生成动态3D矩阵

时间:2013-08-31 23:35:13

标签: c++ dynamic matrix

我需要动态生成这样的3D矩阵:

float vCube[8][3] = {
    {1.0f, -1.0f, -1.0f}, {1.0f, -1.0f, 1.0f},
    {-1.0f, -1.0f, 1.0f}, {-1.0f, -1.0f, -1.0f},
    {1.0f, -1.0f, -1.0f}, {1.0f, 1.0f, 1.0f},
    {-1.0f, 1.0f, 1.0f}, {-1.0f, 1.0f, -1.0f}
};

我的意思是,取一个值并将放在矩阵中的运行时间。 我尝试制作一个浮动指针,然后通过 new 添加3D元素,但结果不是我想要的。

请注意,我不想像矢量等那样使用STL,只是一个平面矩阵。

3 个答案:

答案 0 :(得分:0)

无论您是否使用vector,我建议您使用:

struct Elem3D
{
   float v[3]; 
};

然后您可以轻松创建vector

vector <Elem3D> cube(8); 

或动态分配多个元素

Elem3D *cube = new Elem3D[8]; 

在不使用structclass的情况下使用二维数组非常快速地在语法和#34;脑力训练&#34;中变得非常混乱。

答案 1 :(得分:0)

您还可以在一维数组中存储3D矩阵

 x = height
 y = width
 z = depth
 float VCube[x*y*z]
 a_ijk = VCube[i + y * (j + z * k)]

一个有趣的问题是,如果我们想要进行矩阵运算,知道哪个解决方案(这个或Mats Petersson解决方案)可以减少缓存未命中

答案 2 :(得分:0)

要初始化2维数组,首先要定义变量;

float vCube[8][3];

然后创建一个初始化vCube的函数,或者你可以像这样在构造函数中进行初始化。

void function(float a, float b, float c) {
  for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 3; j +=3) {
      vCube[i][j] = a;
      vCube[i][j+1] = b;
      vCube[i][j+2] = c;
    }
  }
}