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

つまり、実行時に値を取り、マトリックス内に配置します。float へのポインターを作成してから、 newで3D 要素を追加しようとしましたが、結果は私が望むものではありませんでした。

ベクトルなどの STL を使用したくないことに注意してください。平面行列だけです。

4

3 に答える 3

0

a を使用するかどうかに関係vectorなく、以下を使用することをお勧めします。

struct Elem3D
{
   float v[3]; 
};

次に、非常に簡単に作成できますvector

vector <Elem3D> cube(8); 

またはいくつかの要素を動的に割り当てる

Elem3D *cube = new Elem3D[8]; 

structまたはを使用せずに 2 次元配列をclass扱うと、構文的にも「頭が痛くなる」こともありません。

于 2013-08-31T23:39:43.097 に答える
0

3D マトリックスを 1 次元配列に格納することもできます

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

興味深い質問の 1 つは、行列演算を実行する場合にキャッシュ ミスを減らすソリューション (このソリューションまたは Mats Petersson ソリューション) を知ることです。

于 2013-08-31T23:46:59.313 に答える
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;
    }
  }
} 
于 2013-09-01T06:10:41.827 に答える