0

C++ で 3D キューブ グリッドを作成したいのですが、問題があります: 開始点 (xs、ys、zs)、終了点 (xe、ye、ze)、および 3 つの軸に沿った要素の数を指定した後..各立方体の 8 つの角を特定したい..原点を (0,0,0) に設定し、i,j,k を 3 つの軸に沿って移動するインデックスに設定すると、次のことがわかります。

1° コーナーは (i,j,k) にある 2° コーナーは (i+1,j,k) にある 3° コーナーは (i,j+1,k) にある

等々..

このトリプルの値を取得し、すべての要素の 3 つの「for ループ」内の 1 つのポイントを特定する方法がわかりません...助けてください :)

4

1 に答える 1

2

最初に単純な構造体 point3D を定義します。

typedef struct {

  float x;
  float y;
  float z;
} point3D;

グリッドを生成するためにこれを書きました:

//Compute edge sizes 
float x_size = xe - xs;
float y_size = ye - ys;
float z_size = ze - zs;

//Compute steps
float x_step = x_size/n_step;
float y_step = y_size/n_step;
float z_step = z_size/n_step;

//Points per edge (including ending point)
int n = n_step + 1;

//Alloc grid (you can use malloc if you prefer)
point3D grid[n*n*n];

for (int i = 0; i < n; i++) { //move on x axis

  for (int j = 0; j < n; j++) { //move on y axis

    for (int k = 0; k < n; k++) { //move on z axis

      point3D p;
      p.x = xs + x_step * i;
      p.y = ys + y_step * j;
      p.z = zs + z_step * k;
      grid[i+n*j+n*n*k] = point3D;
    } 
  }
}

8 つのコーナー ポイントを使用するには、次のようにします。

point3D corner = grid[n_step*x + n*n_step*y + n*n*n_step*z];

と:

   (x, y, z)
1: (0, 0, 0)
2: (0, 0, 1)
3: (0, 1, 0)
4: (0, 1, 1)
5: (1, 0, 0)
6: (1, 0, 1)
7: (1, 1, 0)
8: (1, 1, 1)
于 2013-07-11T11:09:13.043 に答える