1

点の空間座標を記憶するには、どちらの方法がより正しいですか?

これ、

int spacial[][][] = new int[1024][768][100];

// first point at
spacial[0][0][0] = 100; // x
spacial[0][0][1] = 200; // y
spacial[0][0][2] = 10;  // z

またはこれ、

//       x    y    z
spacial[100][200][10] = 1; // 1 set that a point is present
4

4 に答える 4

3

それは、コードの使用シナリオによって異なります。3 次元配列の作成はリソース (メモリ) の点で非常にコストがかかるため、ボクセル構造を作成する場合、または空間内のすべてのポイントを埋める必要があることがわかっている場合にのみ使用してくださいx*y*z。この場合、コード

int spacial[][][] = new int[1024][768][100];
spacial[100][200][10] = 1; // 1 set that a point is present

使用するのがより理にかなっています。特定の空間座標が存在するかどうかをすばやく見つけたい場合にも役立ちます。

他のケースでは、構造を作成できます

struct Coord
{
    int x, y, z
}

代わりに、この構造体のインスタンスの配列を作成します。これにより、すべての座標を表す必要がないため (存在しない場合でも)、メモリ効率が向上します。アルゴリズムを使用して、検索に octrees を使用して効率的に検索することはできますが、実装はより複雑になります。別の質問に対する私の回答で、octrees に関する詳細情報を見つけることができます。

于 2013-10-23T12:13:43.873 に答える
2

私は2番目のものを使用します:

//     x    y    z
spacial[100][200][10] = 1; // 1 set that a point is present

ただし、より多くの表現があります。座標だけでなく、角度、半径、詳細については、Wiki を確認してください。

于 2013-10-23T12:03:43.420 に答える