2

質問で私の質問を明確にしましょう:

大きな立方体 = 100*100*100 があり、大きな立方体を構築する大きな立方体内に小さな立方体があり、それらのサイズは = 10*10*10 であるとします。(大きな立方体の中に 1000 個の小さな立方体があります) さて、ポイント (2,2,2) がどの立方体に存在するかを確認する必要があります。答えは、この質問の最初のキューブです。次に、立方体を見つけたら、各立方体を構成するポイントの数を保持します。

私の試み: 最初は自分のポイントを 8 コーナーで比較すれば十分だと思いました。ポイントの座標はキューブの 4 つのコーナーよりも大きく、キューブの残りの 4 つのコーナーよりも小さい必要があると考えていたので、コーナー ポイントの座標を繰り返しインクリメントして、他のキューブをチェックしました。しかし、今では私が間違っていることがわかりました。

この問題に最適なアルゴリズムは何でしょうか?

よろしく、アマデウス

注: MATLAB を使用しているため、この目的のための組み込み関数があれば、それらも使用できます。

4

1 に答える 1

0

立方体 N*N*N があるとします。そして、次元 n*n*n の小さな立方体を作成します。次に、すべての立方体を 3D 配列で表すことができます。つまり、原点に最も近いエッジ ( a*n, b*n, c*n ) を持つ立方体が、この 3D 配列のインデックス (a, b , c) で表されます。そのインデックスに格納されている値は、そのキューブ内のポイントの数です。ここに疑似コードがあります

//Pseudo code
int [N/n][N/n][N/n] arrayWithCountOfPointsInsideCubes;

void function countPointsForCubes(double point_x, point_y, point_z)
{ 
  arrayWithCountOfPointsInsideCubes[pint_x/n][point_y/n][point_z/n]++;
}
于 2012-11-30T09:25:44.870 に答える