2013-08-31 166 views
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} 
}; 

我的意思是,取一個值,並把它基質上運行的時間。 我試圖做一個指針浮動,然後通過新增添加3D元素,但結果不是我想要的。

請注意,我不想使用像矢量等STL,只是一個平面矩陣。

+0

爲什麼你不想使用矢量? – Borgleader

+1

1)這不是一個3D矩陣。 2)什麼是形成規則? 3)你製作的代碼是什麼,輸出是什麼,爲什麼它不符合你的期望? –

回答

0

無論您使用的是vector與否,我會建議你使用:

struct Elem3D 
{ 
    float v[3]; 
}; 

然後你就可以很容易地創建一個vector

vector <Elem3D> cube(8); 

或動態分配數量的元素

Elem3D *cube = new Elem3D[8]; 

使用二維陣列時無使用structclass很快就會在句法上和「brainhurt」中非常混亂。

+0

是的,這是我試過的,問題是我需要給一個指向float [j] [k]的指針,並且從結構體中的投射是不可能的。 – harryPoker

0

您還可以將3D矩陣存儲在一個維數組

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

一個有趣的問題是要知道哪種解決方案(這或墊皮特森溶液)降低高速緩存未命中,如果我們想要做的矩陣運算

+0

@MatsPetersson你知道哪種方式減少緩存未命中嗎? –

+0

'我','j'和'k'是我想讀的位置嗎? – harryPoker

+0

@harryPoker是的 –

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