0

我需要像这样动态生成一个 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,只是平面矩阵。

4

3 回答 3

0

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

struct Elem3D
{
   float v[3]; 
};

然后你可以很容易地创建一个vector

vector <Elem3D> cube(8); 

或动态分配多个元素

Elem3D *cube = new Elem3D[8]; 

在不使用的情况下使用二维数组structclass很快就会在语法和“脑损伤”方面变得非常混乱。

于 2013-08-31T23:39:43.097 回答
0

要初始化一个二维数组,首先定义变量;

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;
    }
  }
} 
于 2013-09-01T06:10:41.827 回答
0

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

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

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

于 2013-08-31T23:46:59.313 回答