[英]Generating a dynamic 3D 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,而只是使用平面矩陣。
無論您是否使用vector
,我都建議您使用:
struct Elem3D
{
float v[3];
};
然后,您可以輕松創建vector
:
vector <Elem3D> cube(8);
或動態分配一些元素
Elem3D *cube = new Elem3D[8];
在不使用struct
或class
情況下使用二維數組很快就會在語法和“ brainhurt”方面變得非常混亂。
您還可以將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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.