C++ 生成动态三维矩阵
我需要动态生成一个3D矩阵,如下所示:C++ 生成动态三维矩阵,c++,dynamic,matrix,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} }; 我的意思是,获取一个值并将其放入
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}
};
我的意思是,获取一个值并将其放入运行时间矩阵中。
我尝试将指针指向float,然后通过new添加3D元素,但结果不是我想要的
请注意,我不想使用类似STL的向量等,而只是平面矩阵。无论您是否使用
向量,我建议您使用:
struct Elem3D
{
float v[3];
};
然后,您可以非常轻松地创建一个向量:
vector <Elem3D> cube(8);
在不使用struct
或class
的情况下使用二维数组很快就会在语法和“脑损伤”方面变得非常混乱 还可以在一维数组中存储3D矩阵
x = height
y = width
z = depth
float VCube[x*y*z]
a_ijk = VCube[i + y * (j + z * k)]
一个有趣的问题是,如果我们想执行矩阵运算来初始化二维数组,首先定义变量,那么知道哪种解决方案(此解决方案或Mats-Peterson解决方案)可以减少缓存未命中
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;
}
}
}
void函数(浮点a、浮点b、浮点c){
对于(int i=0;i<8;i++){
对于(int j=0;j<3;j+=3){
vCube[i][j]=a;
vCube[i][j+1]=b;
vCube[i][j+2]=c;
}
}
}
为什么不想使用矢量?1)这不是3D矩阵。2) 形成规则是什么?3) 您生成的代码是什么,输出是什么,以及为什么它不符合您的期望?@MatstPeterson您知道哪种方法可以减少缓存未命中?是的,这就是我尝试的方法,问题是我需要给一个指向浮点[j][k]的指针,而从结构进行强制转换是不可能的。
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;
}
}
}