生成动态三维矩阵

Generating a dynamic 3D matrix

本文关键字:三维 动态      更新时间:2023-10-16

我需要动态生成这样的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之类的向量,只想使用平面矩阵。

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

struct Elem3D
{
   float v[3]; 
};

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

vector <Elem3D> cube(8); 

或者动态地分配多个元素

Elem3D *cube = new Elem3D[8]; 

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

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

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

一个有趣的问题是,如果我们想进行矩阵运算

,要知道哪种解决方案(此解决方案或Mats-Petersson解决方案)可以减少缓存未命中

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

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;
    }
  }
}