プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

データ構造の四分木


四分木は、2次元空間上の点のデータを効率的に格納するために実装されたツリーです。このツリーでは、各ノードに最大4つの子があります。

次の手順を実行して、2次元領域から四分木を構築できます

  • 現在の2次元空間は4つのボックスに分割されています。
  • ボックスが1つ以上のポイントで構成されている場合は、子オブジェクトを作成し、ボックスの2次元空間を格納します。
  • ボックスにポイントが含まれていない場合は、その子を作成しないでください。
  • 各子に対して再帰を実行します。

四分木は画像圧縮で実装され、各ノードはその子のそれぞれの平均色で構成されます。

ツリーの奥深くに行くほど、画像の詳細がわかります。

四分木は、2次元領域のノードの検索にも実装されます。たとえば、特定の座標に最も近い点を計算したい場合は、四分木を実装して計算できます。

関数の挿入

挿入関数は、既存のクアッドツリーにノードを挿入するために実装されています。この関数は、最初に、指定されたノードが現在のクワッドの境界内にあるかどうかを確認します。そうでない場合は、すぐに挿入をキャンセルします。境界内にある場合は、その場所に基づいて、このノードを含む適切な子を選択します。この関数はO(Log N)です。ここで、Nは距離のサイズを示します。

検索機能

検索機能は、指定されたクワッド内のノードを見つけるために実装されています。また、指定されたポイントに最も近いノードを返すように編集することもできます。この関数は、指定されたポイントを取得し、子クワッドの境界と比較して再帰することによって適用されます。この関数はO(Log N)です。ここで、Nは距離のサイズを示します。

四分木のいくつかの一般的な使用法

  • 画像の画像表現
  • 画像の画像処理
  • メッシュのメッシュ生成
  • 2次元で効率的な衝突検出を実行します
  • 多次元場(計算流体力学、電磁気学)の解を見つけるために実行します
  • 状態の見積もり
  • クアッドツリーは、フラクタル画像分析の分野でも実装されています

  1. データ構造における圧縮された四分木と八分木

    圧縮された四分木 細分化されたセルに対応するすべてのノードを格納するときに、多くの空のノードを格納してしまう可能性があります。このようなまばらなツリーのサイズを縮小するには、葉に興味深いデータがあるサブツリー(つまり、「重要なサブツリー」)のみを保存します。ここでも、実際にサイズをさらに縮小することができます。重要なサブツリーのみを考慮する場合、プルーニングプロセスは、中間ノードの次数が2(1つの親と1つの子へのリンク)であるツリー内の長いパスを回避する場合があります。このパスの先頭にノードUを格納し(そして削除されたノードを表すためにいくつかのメタデータをそれに関連付けて)、その最後にルー

  2. ハーフエッジデータ構造

    はじめに テンプレートパラメータまたはハーフエッジデータ構造(HalfedgeDSと略記)のHDSは、平面マップ、多面体、またはその他の方向付け可能な2次元など、頂点、エッジ、および面の入射情報を維持できるエッジ中心のデータ構造として定義されます。ランダムな次元に埋め込まれたサーフェス。各エッジは、反対方向の2つのハーフエッジに分割されます。各ハーフエッジには、1つの入射面と1つの入射頂点が格納されます。各面と各頂点に1つの入射ハーフエッジが格納されます。ハーフエッジデータ構造のバリエーションを減らすと、面のハーフエッジポインタや面の保存など、この情報の一部を削除できます。 ハーフエッジデ