1

構造を作成し、xyz平面の座標、またはポイントから3次元の距離と考えることができる変数を配列に入力しました。

for (a=1; a<=lst; a++) {
for (b=1; b<=hst; b++) {    
        for (c=1; c<=wst; c++) {

    point[d].x=a*k+px;
    point[d].y=b*k+py;
    point[d].z=c*k+pz;
    d++;

    }
    }
}

変数px...は、一般的なkの一部をランダムに追加して、「剛性の低い」立方体を作成します。ポイントの数だけ実行されるループの反復で、選択した「ポイント」の特定の半径内にある「ポイント」を特定したいと思います。ただし、point [num]配列内のすべてのポイントをチェックして、それが近いかどうかを確認するループを実行せずに、これを実行したいと思います。point [num]配列内のポイントの順序に基づくチェックを行わずに、これを回避するためにできることはありますか?

4

1 に答える 1

2

私はこれを行うための2つの良い方法を見ることができます。

  1. 探しているポイントが軸方向に整列したグリッド内にある場合は、特定の半径にあるポイントにすぐにアクセスできます。これを行う方法は、x、y、zポイントを取得し、それを半径とともにグリッド位置に変換して、x、y、およびzの最小および最大グリッド位置を定義することです。その後、これらの変数にすぐにアクセスできます。

  2. ポイントが軸方向に整列されてグリッドに並べられていないフォームにない場合は、すばやく検索できるフォームにポイントを配置する必要があります。kdツリーをお勧めします。O(n)からへの検索操作が必要O(log(n)です。それを行う方法は、平均に沿って設定されたポイントを半分に分割し、高速で検索可能なツリーができるまで繰り返すことです。

ここに画像の説明を入力してください

PCL(ポイントクラウドライブラリ)はあなたにもこれを行います!

ここにリンクがあります:

http://pointclouds.org/

そして、pclを使用したkdツリーに関するチュートリアル:

http://pointclouds.org/documentation/tutorials/kdtree_search.php#kdtree-search

実際、入力されたポイントからkdツリーに保存されたポイントクラウドへの半径検索のコードも表示されます。私が提供したチュートリアルページの半径検索で隣人を見てください。

幸運を!

于 2012-11-27T22:46:05.243 に答える