(57)【要約】      （修正有）【課題】Ｎ次元２分木の巡回方法及びシステムを提供する。【解決手段】巡回方法は、メモリに記憶され、かつ２分木と関連した特定用途向けデータの位置を検出するために、メモリに記憶された２分木を巡回する。２分木は、Ｎ次元空間の、セルの階層への空間分割を備える。それぞれのセルはＮ次元空間を囲むルートセルから開始し、セルのＮ個の中間平面に沿って２Ｎ個の子セルに連続的に、かつ条件付きで分割される。２分木のそれぞれのセルは特定用途向けデータを構成する関連した特性を有し、子セルは親セルから直接インデックスされる。位置コードの組、２分木のセル、および終了条件が指定される。次にセルの特性が判定される。終了条件が満たされていないときは、判定される次のセルを直接インデックス付けするために、位置コードの組に算術オペレーションが実行される。【選択図】図１
2004164596.tif 000002
【特許請求の範囲】
【請求項１】
メモリに記憶され、かつ、２分木と関連した特定用途向けデータの位置を検出するために、前記メモリに記憶された前記２分木を巡回する方法であって、前記２分木は、Ｎ次元空間の、セルの階層への空間分割を備え、それぞれのセルは、前記Ｎ次元空間を囲むルートセルから開始し、前記セルのＮ個の中間平面に沿って２Ｎ個の子セルに連続的に、かつ、条件付きで分割され、それぞれのセルは、前記特定用途向けデータを構成する関連した特性を有し、子セルが親セルから直接インデックス付けされ、該方法は、
位置コードの組を指定することと、
セルを指定することと、
前記セルの前記特性が終了条件を満たすかどうかを判定すること、そして、終了条件を満たさない場合には判定されるべき次のセルを直接インデックスするために、前記位置コードの組に対して算術オペレーションのみを適用することと、そうでなく、
終了条件を満たす場合には、前記セルを目的のセルとして特定することと、
前記目的のセルの前記特定用途向けデータを前記メモリから取り出すことと、
を備えた方法。
【請求項２】
前記位置コードを指定するステップは、
前記Ｎ次元空間におけるＮ次元の点のＮ個の座標を求めることと、
結果を生成するために、それぞれの座標について、該座標の値に２ｋ（ただしｋは前記２分木の前記ルートセルのレベルである）を乗算することと、
前記対応する位置コードを指定するために、前記結果をバイナリ形式に変換することと
をさらに備えた請求項１に記載の方法。
【請求項３】
前記位置コードの組のそれぞれは、前記Ｎ次元空間の点に対応する座標から求められ、前記セルは、前記２分木の前記ルートセルであり、前記終了条件は、前記セルがリーフセルである場合に満たされる、請求項１に記載の方法。
【請求項４】
前記点を含むＮ次元長方形領域を最小頂点ｖ０および最大頂点ｖ１によって表すことと、
リーフセルに到達するか、または前記２分木の終了レベルに到達すると、前記終了条件を満たすことと
をさらに備え、
前記終了レベルは、前記Ｎ次元長方形領域を囲む最小セルを発見するための前記最小頂点ｖ０および前記最大頂点ｖ１の位置コードから求められる請求項３に記載の方法。
【請求項５】
前記終了レベルを求めることは、
前記Ｎ次元空間のそれぞれの座標について、候補レベルを求めることと、
前記候補レベルのうちの最大のものに対して前記終了レベルを設定することと
を備え、
前記候補レベルを求めることは、
前記最小頂点の前記座標から対応する位置コードｌｃｖ０を求めることと、
前記最大頂点の前記座標から対応する位置コードｌｃｖ１を求めることと、
バイナリコードｂｃ＝（ｌｃｖ０  ＸＯＲ  ｌｃｖ１）を求めることと、
前記バイナリコードｂｃにおいてＭＳＢ（最上位ビット）である左側から最初の１のビットを求めることと、
前記最初の１のビットのすぐ左の０のビットのビット番号に前記候補レベルを設定することと
をさらに備えた請求項４に記載の方法。
【請求項６】
前記位置コードは、所定のセルおよび該所定のセルからの方向に対する算術オペレーションによって求められ、前記終了条件は、前記方向における前記所定のセルの近傍のセルを発見するために、前記２分木において、リーフセルに到達したとき、あるいは終了レベルに到達したときに満たされる請求項１に記載の方法。
【請求項７】
前記セルは、前記２分木の前記ルートセルである、請求項６に記載の方法。
【請求項８】
前記セルは、前記所定のセルおよび前記近傍のセルの共通の先祖である、請求項６に記載の方法。
【請求項９】
前記算術オペレーションは、
前記Ｎ次元空間のそれぞれの座標について、前記所定のセルに対応する位置コードｌｃｃｅｌｌを求めることと、
前記Ｎ次元空間のぞれぞれの座標について、前記近傍のセルの最小頂点に対応する座標値が、前記セルの最大頂点に対応する座標値と等しい場合には、前記所定のセルのサイズを、前記対応する位置コードｌｃｃｅｌｌに加算することと、
前記Ｎ次元空間のぞれぞれの座標について、前記近傍のセルの最大頂点に対応する座標値が、前記セルの最小頂点に対応する座標値と等しい場合には、前記対応する位置コードｌｃｃｅｌｌからサイズを減算することと、
をさらに備えた請求項６に記載の方法。
【請求項１０】
前記サイズは、前記２分木の最小セルのサイズである、請求項９に記載の方法。
【請求項１１】
前記共通の先祖を求めることは、
前記Ｎ次元空間のそれぞれの座標について候補レベルを求めることと、
前記候補レベルのうちの最大のものに対して停止レベルを設定することと、
前記停止レベルに到達するまで、前記所定のセルから上方に向けて親のポインタに従うことにより、前記共通の先祖を求めることと
を備え、
前記候補レベルを求めることは、
前記座標について、前記所定のセルの位置コードｌｃｃｅｌｌを求めることと、
前記座標について、前記近傍のセルの位置コードｌｃを求めることと、
バイナリコードｂｃ＝（ｌｃ  ＸＯＲ  ｌｃｃｅｌｌ）を求めることと、
そのビット番号が前記所定のセルのレベルである、ｂｃにおけるビットｂｃｅｌｌを求めることと、
ｂｃにおいて、ｂｃｅｌｌの左に向かって最初の０のビットｂｃａｎｄｉｄａｔｅを求めることと、
前記候補レベルを、ｂｃａｎｄｉｄａｔｅのビット番号として求めることと
を備えた請求項８に記載の方法。
【請求項１２】
前記Ｎ次元の点は、任意のセルのＮ個の位置コードを指定するための前記２分木の前記任意のセルの最小頂点である、請求項２に記載の方法。
【請求項１３】
光線が前記２分木で選択されたセルと交差する複数の点を指定するために、前記２分木を通して前記光線をトレースすることと、
それぞれの前記点について、位置コードの組を求めることと、
前記位置コードの組のそれぞれについて、リーフセルである前記対応する目的のセルを特定することと、
をさらに備えた請求項２に記載の方法。
【請求項１４】
前記選択されたセルは、前記２分木のボトム−アップ巡回のためのリーフセルである、請求項１３に記載の方法。
【請求項１５】
前記目的のセルを特定することは、光線停止条件が満たされたときに終了する、請求項１３に記載の方法。
【請求項１６】
前記目的のセルは、前記光線がトレースされる順序で特定される、請求項１３に記載の方法。
【請求項１７】
前記セルは、前記２分木の前記ルートセルであり、位置コードの第１の組は、前記光線が前記２分木に入る入口点として求められ、次の位置コードの組のそれぞれは、前記光線が前記目的のセルから出て行く出口点から求められる、請求項１３に記載の方法。
【請求項１８】
次の位置コードの組のそれぞれについて、前記セルは、前記目的のセルと、前記光線が前記目的のセルから出て行く前記出口点に隣接する近傍のセルとの共通の先祖である、請求項１７に記載の方法。
【請求項１９】
前記次の位置コードの組は、前記２分木の前記選択されたセルの位置コードに対する第２の算術オペレーションによって求められる、請求項１７に記載の方法。
【請求項２０】
前記次の位置コードの組を求める前記第２の算術オペレーションは、
その値が、前記目的のセルの前記最大頂点および前記最小頂点の前記対応する座標値と等しい前記出口点の座標の一部を求めることと、
前記一部におけるそれぞれの座標について、前記次の位置コードの組に対応する位置コードを求めることと、
前記光線および位置コードの前記一部に対して算術オペレーションを実行することによって、前記一部にない前記次の位置コードの組の前記位置コードを求めることと
を備え、
前記次の位置コードの組に対応する位置コードを求めることは、
前記目的のセルの対応する位置コードｌｃｃｅｌｌを求めることと、
前記対応する位置コードを求めるために、ｌｃｃｅｌｌおよび前記光線の方向に対して算術オペレーションを実行することと
をさらに備えた請求項１９に記載の方法。
【請求項２１】
前記光線の停止条件は、前記光線が、前記目的のセルに記憶された図形要素と交差したときに満たされる、請求項１５に記載の方法。
【請求項２２】
前記光線の停止条件は、前記光線が、前記２分木から出ていくときに満たされる、請求項１５に記載の方法。
【請求項２３】
Ｎは、ゼロより大きな整数である、請求項１に記載の方法。
【請求項２４】
メモリに記憶され、かつ、２分木と関連した特定用途向けデータの位置を検出するために、前記メモリに記憶された前記２分木を巡回するシステムであって、前記２分木は、Ｎ次元空間の、セルの階層への空間分割を備え、それぞれのセルは、前記Ｎ次元空間を囲むルートセルから開始し、前記セルのＮ個の中間平面に沿って２Ｎ個の子セルに連続的に、かつ、条件付きで分割され、それぞれのセルは、前記特定用途向けデータを構成する関連した特性を有し、子セルが、親セルから直接インデックス付けされ、該システムは、
位置コードの組を指定する手段と、
セルを指定する手段と、
前記セルの前記特性が終了条件を満たすかどうかを判定すること、そして、終了条件を満たさない場合は判定されるべき次のセルを直接インデックスするために、前記位置コードの組に対して算術オペレーションのみを適用する手段と、そうでなく、
終了条件を満たす場合は、前記セルを目的のセルとして特定する手段と、
前記目的のセルの前記特定用途向けデータを前記メモリから取り出す手段と、
を備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、ツリー構造（木構造）のデータ表現に関し、より具体的には、４分木、８分木、およびそれらのＮ次元対応の木に記憶された空間データの位置の検出に関する。
【背景技術】
【０００２】
ツリー構造（木構造）のデータ表現は、広く使用されている。それらの長い歴史ならびに多くの異なる形式および使用のため、表面的には似ているように見える、または、類似の名前を持った多種類の「木」が存在するが、それらの詳細は全く異なり、全く異なって使用される。
【０００３】
したがって、本明細書で定義される「２分木」は、Ｎ次元空間の、セルの階層への空間分割である。Ｎ次元空間を囲むルートセルが、２Ｎ個の等しいサイズの子セルに、その中間平面に沿って条件付きで分割される。次に、それぞれの子セルが同様の方法で、連続的に条件付きで分割される。
【０００４】
２分木のそれぞれのセルは、図形オブジェクト（例えば３次元の３角形メッシュ）の図形要素（例えば３角形）といった特定用途向けデータを備えた関連特性を有する。２分木の子セルは、それらの親セルから直接インデックス付けされる。２分木は、十分に密（populated）または疎（sparse）の状態を取り得る。十分に密の２分木では、それぞれのセルが、最も深い共通のレベルにまで分割される。疎の２分木では、選択されたセルのみが分割され、必要メモリが削減される。
【０００５】
図１は、本明細書で定義される一例の２分木１００を示している。この一例の２分木１００は、４分木、すなわち２次元２分木であるが、我々の方法は、それぞれの次元を独立に取り扱うので、本発明による方法は、８分木、すなわち３次元２分木、さらにはこれより低次元および高次元の２分木にも拡張することができる。
【０００６】
セルは、ルートセル１０１から中間セル１０２を介してリーフセル１０３まで分岐する。通常、これらセルは、特定用途向けデータおよび特性、例えば領域４分木（region quadtree）のセルタイプ、または点４分木（point quadtree）のオブジェクトインデックスと関連付けられる。子セルは、それらの親セルから直接インデックス付けされる（１１０）。直接インデックス付けすることは、メモリ内で子セルを順序付けることにより、または、メモリ内の子セルへのポインタによって行うことができる。
【０００７】
２分木１００の深さは、ＮＬＥＶＥＬＳである。ルートセル１０１のレベルは、ＬＥＶＥＬＲＯＯＴ＝ＮＬＥＶＥＬＳ−１である。可能な限り最小のセルのレベルは、ゼロである。２分木１００は、正規化空間［０，１］×［０，１］上で定義される。同様に、Ｎ次元２分木は、［０，１］Ｎ上で定義される。これは、制限的に見えるかもしれないが、実際には、ほとんどの空間データは、データの座標への変換を適用することにより、この正規化空間で表すことができる。
【０００８】
４分木および８分木は、コンピュータビジョン、ロボット工学、およびパターン認識といった多くのさまざまな分野で使用される。コンピュータグラフィックスでは、２次元画像および３次元オブジェクトを表す空間データを記憶するために、４分木および８分木が広く使用される。これについては、Samet著の「The Quadtree and Related Hierarchical Data Structures」, Computing Surveys, Vol. 16, No. 2, pp. 187-260, Jun. 1984およびMartin等著の「Quadtrees, Transforms and Image Coding」, Computer Graphics Forum, Vol. 10, No. 2, pp. 91-96, Jun. 1991を参照されたい。
【０００９】
図２に示すように、４分木は空間の領域を４つの等しいサイズの象限、すなわちセル、に連続的に分割する。ルートセルから開始して、セルがオブジェクト境界を含む場合（領域４分木）、または、セルが特定の個数より多くのオブジェクトを含む場合（点４分木）といった所定の条件下で、セルは、より小さなセルに再分割される。空間を分割しない方法、または、空間を均等に分割する方法と比較すると、４分木および８分木は、データの記憶に必要なメモリ量を削減することができ、データの照会および処理（例えば、衝突検出およびレンダリング）を行う実行時間を改善することができる。
【００１０】
２分木に記憶された情報を管理することは、一般に、点の位置検出（point location）、領域の位置検出（region location）、および近傍セル探索（neighbor search）の３つの基本オペレーションを必要とする。
【００１１】
点の位置検出は、所定の点２００を含むリーフセル２０１を発見する。例えば、都市の位置といった地理データを記憶する４分木は、地理座標、すなわち経度および緯度によって分割される。点の位置検出を使用して、所定の地理座標、すなわち点２００の近くの都市を発見することができる。
【００１２】
領域の位置検出は、最小頂点ｖ０２１１および最大頂点ｖ１２１２によって表される指定された長方形領域２１０を囲む最小セルまたは一組のセルを発見する。地理に関する４分木の例によると、領域の位置検出を使用して、指定された地理座標の所定の範囲内に存在するすべての都市を求めることができる。
【００１３】
近傍セル探索は、所定のセルに隣接する、指定された方向のセルを発見する。地理に関する４分木では、点の位置検出は、まず所定の都市を含むセルの位置を検出するための近傍セル探索と組み合わせることができ、次に所定の方向の隣の都市を発見するための近傍セル探索と組み合わせることができる。これらのオペレーションのすべてにおいて、２分木は、セルを接続するポインタに従って巡回される。
【００１４】
第４のオペレーションは、レイトレーシングと呼ばれ、３次元モデルをディスプレイにレンダリングするグラフィックスアプリケーションによって使用される。これについては、Foley等著の「Computer Graphics Principles and Practice」, Addison-Wesley, 1992を参照されたい。これらのアプリケーションでは、シーンを備える図形要素が、８分木のリーフセルに置かれる。レイトレーシングは、光線に沿ったリーフセルの連続的な特定を必要とする。これらリーフセルを特定する１つの方法は、点の位置検出および近傍セル探索を組み合わせることである。
【００１５】
従来の２分木における点の位置検出オペレーションは、ルートノードを起点とする２分木を下方に向かって分岐していくことを必要とする。分岐の決定は、点の位置のそれぞれの座標を、現在の囲みセル（enclosing cell）の中間平面の位置と比較することにより行われる。
【００１６】
従来の２分木における近傍セル探索は、所定のセルから、当該所定のセルおよび近傍のセルの最小の共通の先祖へ向かって上方に再帰的に分岐し、続いて、下方に向かって再帰的に分岐して近傍セルの位置を検出することを必要とする。再帰におけるそれぞれの分岐は、現在のセルおよびその親に依存した値を比較することに基づいている。通常、それらの値は、テーブルに記憶される。
【００１７】
従来技術の点の位置検出、領域の位置検出、および近傍セル探索は、ブール演算、すなわち比較が使用されるので、多くの時間を要する。ブール演算は、通常、現代のＣＰＵにおける予測分岐論理によって実施される。予測分岐は、間違って予測された分岐命令において命令パイプラインを行き詰まらせることになる。これについては、Knuth著の「The Art of Computer Programming」, Volume 1, Addison-Wesley, 1998およびKnuth著の「MMIXware: A RISC Computer for the Third Millennium」, Springer-Verlag, 1999を参照されたい。
【００１８】
従来の木の巡回オペレーションについては、一般に、これまでの分岐の決定が、これから先の分岐の決定に何ら関与しないので、誤った予測が頻繁に発生する。これについては、Pritchard著の「Direct Access Quadtree Lookup」, Game Programming Gems 2, ed. DeLoura, Charles River Media, Hingham, MA, 2001を参照されたい。
【００１９】
その上、従来の近傍セル探索方法は、再帰的である。再帰は、スタックフレームを保持し、関数呼び出しを行う結果として、オーバーヘッドを増加させる。また、従来技術の近傍セル探索方法は、通常のアプリケーションにおいて高価なメモリアクセスを必要とするテーブル検索も使用する。最後に、従来技術の近傍セル探索方法は、４分木および８分木にのみ限定され、これらの方法をより高次元の２分木に拡張することは、非常に複雑なものとなる。
【００２０】
図３は、典型的な従来技術の点の位置検出オペレーション３００を示している。このオペレーションは、所定の点３０１および開始セル３０２の位置から開始する。まず、セル３０２と関連した特性（Ｃ）３０３が、判定される（３１０）。真（Ｔ）ならば、セル３０２が、点３０１を含む目的のセル３０９である。偽（Ｆ）ならば、点３０１の位置のそれぞれの座標が、セル３０２の対応する中間平面の位置と比較される（３２０）。この比較３２０により、判定される次のセル（子セル）３０４へのインデックスを計算する（３３０）ことが可能となる。
【００２１】
上述したように、比較３２０は、ブール演算を必要とする。Ｎ次元の２分木については、２分木の巡回中に訪れるそれぞれのセルに対して、少なくともＮ回のこのようなブール演算が必要となる。上述したように、これらのブール演算は、命令パイプラインを行き詰まらせる確率が高く、これにより、性能を劣化させる。
【００２２】
Pritchardは、「Direct Access Quadtree Lookup」において、領域境界ボックスのｘ境界およびｙ境界の位置コード（locational code）を使用する４分木についての領域の位置検出オペレーションを記述している。Pritchradの４分木は、彼の子セルを親セルから直接インデックス付けすることができないので、上記定義に基づく２分木ではない。
【００２３】
その方法は、セルの規則的な配列からなる階層で効果を現す。この階層では、それぞれのレベルが、完全に再分割され、前のレベルの４倍の個数のセルを含む。彼の空間データの２次元表現は、大量のメモリを必要とし、３次元およびより高次元の空間データでは、さらにより多くのメモリを必要とすることになろう。したがって、その方法は、多くのアプリケーションにとって実用的ではない。
【００２４】
Pritchardの方法は、２つのステップを有する。まず、その方法は、領域境界ボックスの左端および右端のｘ境界、ならびに上端および下端のｙ境界の位置コードを用いて、囲みセルのレベルを決定する。次に、領域境界ボックスの左下端の頂点の位置の拡大縮小バージョンが、このレベルの規則的な配列をインデックスするために使用される。
【００２５】
従来、位置コードは、「線形４分木（linear quadtree）」および「線形８分木（linear octree）」と共に使用されてきた。これについては、H. Samet著の「Applications of Spatial Data Structures: Computer Graphics, Image Processing, GIS」, Addison Wesley, Reading, MA, 1990を参照されたい。線形４分木および線形８分木は、我々の定義に基づく２分木ではない。正確には、線形４分木および線形８分木は、それぞれのリーフセルが、その交互に配置された位置コードおよび他のセル特有のデータを含むリーフセルのリストからなる。一般に、線形４分木および線形８分木は、２分木よりもコンパクトである。例えば、線形４分木および線形８分木は、より高価で複雑な処理方法を犠牲にして、中間セルを表さず、直接インデックス付けするための明確なリンクを提供しない。
【００２６】
線形４分木および線形８分木の位置コードは、線形４分木が、基数４（または「ドントケア」の方向コード（directional code）が使用される場合には５）の位置コードを使用し、線形８分木が、基数８（または９）の位置コードを使用するように、セルの最小頂点の座標値を備えるビットを交互に配置する。これについては、H. Samet著の「Applications of Spatial Data Structures: Computer Graphics, Image Processing, GIS」, Addison-Wesley, Reading, MA, 1990を参照されたい。
【００２７】
コンピュータグラフィックスおよびボリュームレンダリングでは、レイトレーシング法は、空間の大きな空の領域を通る光線のトレーシングを高速化するために、８分木を利用することが多い。それらの方法は、８分木を通過する光線に沿った空でないリーフセルを決定し、次いで、これらのセル内の光線面の交差を処理する。
【００２８】
８分木を通じて光線をトレースする２つの基本的手法が存在する。すなわち、ボトムアップ法およびトップダウン法である。ボトムアップ法は、光線が遭遇する最初のリーフセルから開始し、次に、近傍セル発見技法を用いて、光線に沿った次のリーフセルをそれぞれ発見する。トップダウン法は、ルートセルから開始し、再帰的手順を用いて、光線と交差する子孫のリーフセルを発見する。レイトレーシング中に８分木を巡回する方法の広範囲の概要は、Havranによって、「A Summary of Octtree Ray Traversal Algorithms」, Ray Tracing News, 12(2), pp. 11-23, 1999に記述されている。
【００２９】
StolteおよびCaubetは、「Discrete Ray-Tracing of Huge Voxel Spaces」, Computer Graphics Forum, 14(3), pp. 383-394, 1995において、８分木に記憶されたボクセルデータ組の位置コードを使用するトップダウンレイトレーシング手法を記述している。まず、光線が８分木に入る点を含むリーフセルの位置が検出される。次に、光線面交差（ray-surface intersection）のないそれぞれのリーフセルについて、３ＤのＤＤＡが、リーフセルと近傍の次のセルとの境界に遭遇するまで、可能な限り最小のリーフセルのサイズに比例した増分で、光線に沿って進んで行くために使用される。次に、再帰的スタックからセルをポップして、リーフセルおよび近傍の次のセルの共通の先祖の位置を検出し、次いで、彼らの点の位置検出方法を用いて８分木を下方に巡回することにより、近傍の次のセルが発見される。しかしながら、彼らの方法は、ブール比較を必要とし、したがって、上述した誤った予測の問題に悩むこととなる。
【発明の開示】
【発明が解決しようとする課題】
【００３０】
したがって、必要メモリを増やすことなく、ブール演算を回避し、再帰およびテーブル検索のためのメモリアクセスをなくすことによって従来技術の性能を改善するＮ次元２分木の巡回方法を提供することが望まれている。
【課題を解決するための手段】
【００３１】
本発明は、２分木、例えば４分木、８分木、およびそれらのＮ次元対応の木の効率的な巡回方法を提供する。本方法は、位置コードを使用し、本質的に非再帰的で、テーブル検索のためのメモリアクセスを必要としない。また、本方法は、誤って予測された比較の数も削減する。本方法は、点の位置検出の手順、領域の位置検出の手順、近傍セル探索の手順、およびレイトレーシングの手順を含む。
【発明の効果】
【００３２】
本発明は、単純で、効率的で、任意の次元数で機能し、かつ、本質的に非再帰的な、２分木の点の位置検出、領域の位置検出、近傍セル探索、およびレイトレーシングのための方法を提供する。本発明による方法は、予測動作に乏しいブール演算の回数を大幅に削減し、テーブル検索によって必要とされるメモリアクセスを必要としない。
【発明を実施するための最良の形態】
【００３３】
図４は、１次元２分木の階層的なツリー構造（木構造）４００および関連した位置コードを示している。位置コード４０１は、本発明による２分木巡回方法によって使用される。それぞれの位置コード４０１は、木の最大レベル数ＮＬＥＶＥＬＳ以上のビットサイズを有するデータフィールドにバイナリ形式で表現される。例えば、最大８レベルを有する２分木のそれぞれの位置コードは、８ビットによって表現することができる。
【００３４】
それぞれの位置コード４０１のビットは、右端（ＬＳＢ（最下位ビット））から左端（ＭＳＢ（最上位ビット））に向けてゼロから番号付けされる。位置コードのそれぞれのビットは、２分木の対応するレベルにおける分岐パターンを示す。すなわち、ビットｋは、２分木のレベルｋにおける分岐パターンを表す。位置コードが交互に配置される従来技術と異なり、我々は、セルのそれぞれの次元に対して別個の位置コードを使用する。例えば、２次元２分木、すなわち４分木のそれぞれのセルに対する一組の位置コードは、ｘ位置コードおよびｙ位置コードの双方を備える。
【００３５】
セルの位置コードは、２つの方法で求めることができる。第１の方法は、セルの最小頂点のそれぞれの座標値を２ＬＥＶＥＬＲＯＯＴ、例えば２５＝３２と乗算し、次に、その積をバイナリ形式で表現する。図５は、１次元２分木４００の空間分割および関連する位置コード５００を示している。例えば、セル５０１、［０．２５，０．５）は、位置コード５０２、バイナリ（０．２５＊３２）＝バイナリ（８）＝００１０００を有する。
【００３６】
第２の方法は、ルートセルから所定のセルへの分岐パターンに従うものであり、対応するレベルの分岐パターンによってそれぞれのビットを設定する。第２の方法は、ビットＬＥＶＥＬＲＯＯＴをゼロに設定することから開始し、次に、レベルｋ＋１からｋへの分岐の決定が、左に分岐するものである場合には、それぞれの次のビットｋをゼロに設定し、右に分岐するものである場合には、１に設定する。疎な２分木については、リーフセルが、可能な限り最小のセルより大きいならば、下位ビットがゼロに設定される。
【００３７】
４分木、８分木、およびより高次元の２分木では、それぞれの次元の位置コードは、セルの最小頂点の対応する座標値から別々に求められるか（第１の方法）、または、ルートセルから所定のセルに到達するために使用される左−右、ボトム−トップ（バック−フロントなど）の分岐パターンから別々に求められる（第２の方法）。
【００３８】
これらの位置コードのいくつかの性質を用いて、本発明による２分木巡回を提供することができる。
【００３９】
第１に、分岐パターンから位置コードを求めることができるのと同じように、位置コードから分岐パターンを求めることができる。すなわち、位置コードのそれぞれにおける適切なビットを用いて、それぞれの中間セルの対応する子をインデックス付けすることにより、セルの位置コードを、ルートセルから目的のセルへ２分木を巡回するために使用することができる。利点として、我々の方法は、従来技術の高価なブール比較を回避する。
【００４０】
第２に、［０，１）Ｎの任意の点の位置を、第１の方法を使用することにより、一組の位置コードに変換することができる。
【００４１】
これらの性質は、以下でさらに詳述するように、本発明による点および領域の位置検出を可能にする。その上、あるセルの近傍セルの位置コードは、ビットパターンを当該セルの位置コードに対して加算および減算することにより求めることができる。この性質は、近傍セル探索中の再帰およびテーブル検索のためのメモリアクセスをなくすために使用される。
【００４２】
点の位置検出
図６に示すように、本発明による点の位置検出オペレーションは、領域［０，１］Ｎ上で定義される２分木の［０，１）Ｎに位置する所定の点を含むリーフセルを検出する。
【００４３】
第１のステップは、点の位置の座標値を一組の位置コード６０１に変換する。これは、それぞれの値を２ＬＥＶＥＬＲＯＯＴと乗算し、その結果の積を切り捨てて整数にすることにより行われる。この整数は、バイナリ形式で表現される。
【００４４】
第２のステップは、開始セル６０２、例えばルートセルを選択する。セル６０２の特性６０３が判定される（６１０）。例えば、セル６０２がリーフセルであるかどうかが判定される。真ならば、セル６０２は、その点を含む目的のセル６０９である。
【００４５】
一方、偽ならば、２分木のそれぞれのレベルｋにおいて、位置コード６０１のそれぞれからの（ｋ−１）番目のビットが、判定される（６１０）適切な次の（子）セル６０４へのインデックスを求める（６３０）ために使用される。
【００４６】
セルのすべての子供は、このインデックスを可能とするために、連続的に順序付けられていることに留意されたい。この順序付けは、子セルまたは子セルへのポインタをメモリに連続的に記憶することにより行うことができる。インデックス付けされた子セルが子供を持たない場合には、所望のリーフセルに到達し、点の位置検出オペレーションは完了する。
【００４７】
従来技術の点の位置検出オペレーション３００と異なり、我々の点の位置検出オペレーション６００は、それぞれの分岐点において、点の位置およびそれぞれのセルの中間平面の位置との比較を必要としない。これにより、Ｎ次元２分木の巡回中、それぞれのレベルにおけるＮ回の比較がなくなる。
【００４８】
例えば、８レベルの８分木のレベル０のセルにおける点の位置を検出するのに、従来技術のオペレーションは、中間セルの適切な子供に分岐するために、付加的な２４＝（３＊８）回の比較を必要とする。従来技術のこれら付加的な比較は、上述したように誤った予測を示す。
【００４９】
領域の位置検出
領域の位置検出は、所定の領域を囲む最小セルまたは一組のセルを発見する。我々の方法は、長方形の、座標軸に位置合わせされた境界ボックスを完全に囲む単一の最小セルを発見する。
【００５０】
我々の方法は、Ｎ次元２分木における領域の位置検出を提供する。我々の方法は、まず、最小の囲みセル（enclosing cell）のサイズを求める。次に、上述した点の位置検出方法の変形方法が、ルートセルから最小の囲みセルへ２分木を巡回するために使用される。
【００５１】
我々は、領域を定義する最小頂点ｖ０および最大頂点ｖ１の位置コード（ｌｃ）のそれぞれの対応する対の排他的論理和（ＸＯＲ）を求めて、バイナリコード（ｂｃ）、すなわちｂｃ＝（ｌｃｖ０  ＸＯＲ  ｌｃｖ１）を生成することにより、最小の囲みセルのサイズ、すなわちレベルを求める。
【００５２】
次に、それぞれのバイナリコードは、左端（ＭＳＢ（最上位ビット））から探索され、バイナリコードの組の最初の「１」のビットが発見される。この最初の「１」のビットは、位置コードの対の少なくとも１つが異なる、ルートレベルより下の最初のレベルを示す。そして、最小の囲みセルのレベルは、この「１」のビットの直前の「０」のビットのビット番号に等しい。
【００５３】
このレベルが求められると、次に、我々の方法は、リーフセルに遭遇するか、または、求められたサイズのセルに到達するまで、領域の頂点のあらゆるものの位置コード、例えば最小頂点の位置コード、のビットパターンに従って、ルートセルから下方に向かって２分木を巡回する。これにより、所望の囲み（目的の）セルが得られる。我々は、ここで、論理ＯＲ演算子を用いて、１つの条件または両方の条件のいずれかが、２分木の巡回を終了することを示す。
【００５４】
単純なシフトループから、値をビットスキャンするプロセッサ特有の単一命令に至るまで、バイナリコードの最上位の「１」のビットを特定するためのいくつかの方法が存在し、これにより、ループおよびその後の比較がなくなることに留意されたい。
【００５５】
第１の１次元の例として、２分木４００の領域［０．３１，０．６５）は、左側の位置コードおよび右側の位置コードとしてそれぞれ００１００１および０１０１０１を有する。これらの位置コードの排他的論理和（ＸＯＲ）を求めることにより、バイナリコード０１１１００が得られる。このバイナリコードでは、左端（ＭＳＢ（最上位ビット））からの最初の「１」のビットは、ビット位置４で遭遇する（ビット位置は、最右端のＬＳＢビット（最下位ビット）から番号付けされ、０から番号付けされることを思い出していただきたい）。その結果、最小の囲みセルのレベルは５となる。すなわち、領域［０．３１，０．６５）の目的の囲みセルは、ルートセルである。
【００５６】
第２の１次元の例として、２分木４００の領域［０．３１，０．３６）は、位置コード００１００１および００１０１０を有する。ＸＯＲステップによって００００１１が得られ、左端からの最初の「１」のビットは、ビット位置１で遭遇する。その結果、最小の囲みセルのレベルは２である。次に、目的のレベル３のリーフセル５０１、［０．２５，０．５０）に遭遇するまで、左側の位置コード００１００１に従ってルートセルから下方に向けて２分木４００を巡回することによって、この最小の囲みセルが発見される。
【００５７】
近傍セル探索
近傍セル探索は、指定された方向、例えば左、上端、および左上端で所定のセルに隣接するセルを発見する。いくつかの変形形態が存在する。これらの変形形態には、共通の頂点、端、もしくは面により近傍セルを発見するもの、所定のセルと同じサイズもしくは所定のセルより大きなサイズの近傍セルを発見するもの、または、所定のセルのすべてのリーフセルの近傍セルを発見するものが含まれる。
【００５８】
所定のセルの近傍セルを求めるために、我々は、まず、２つの近傍のセルの位置コードのビットパターンが、当該２つのセル間のバイナリ距離だけ異なることに留意する。例えば、あるセルのすべての右近傍セルの左境界は、中間セルおよびリーフセルを含めて、そのセルの左境界から、セルのサイズだけオフセットを有する。したがって、あるセルのすべての右近傍セルのｘ座標に対応する位置コード、すなわちセルのｘ位置コードは、セルのサイズのバイナリ形式をセルのｘ位置コードに加算することにより求めることができる。
【００５９】
セルのサイズのバイナリ形式は、セルのレベル、すなわち、ｃｅｌｌＳｉｚｅ≡ｂｉｎａｒｙ（２ｃｅｌｌＬｅｖｅｌ）から求められる。したがって、あるセルの右近傍セルのｘ位置コードは、そのセルのｘ位置コードおよびｃｅｌｌＳｉｚｅの和である。
【００６０】
一例として、セル５０１、［０．２５，０．５）は、位置コード５０２、００１０００を有し、レベル３である。したがって、そのセルの右境界と接する近傍セルのｘ位置コードは、００１０００＋ｂｉｎａｒｙ（２３）＝００１０００＋００１０００＝０１００００となる。
【００６１】
あるセルの左近傍セルのｘ位置コードを求めることは、より複雑である。セルの左近傍セルのサイズは不明であるので、そのセルのｘ位置コードとそのセルの左近傍セルのｘ位置コードとの間の正確なバイナリオフセットも不明である。しかしながら、可能な限り最小の左近傍セルは、レベル０を有する。したがって、あるセルのｘ位置コードとそのセルの可能な限り最小の左近傍セルのｘ位置コードとの差は、ｂｉｎａｒｙ（２０）となる。すなわち、可能な限り最小の左近傍セルのｘ位置コードは、セルのｘ位置コード−ｂｉｎａｒｙ（１）となる。
【００６２】
さらに、この可能な限り最小の左近傍セルの左境界は、セルのあらゆる左近傍セルの左境界と右境界との間に位置する。このセルには、中間セルおよび可能な限り最小の左近傍セルより大きなリーフセルが含まれる。したがって、この可能な限り最小の左近傍セルのｘ位置コードを用いてルートセルから下方に向かって２分木を巡回し、指定されたレベルの近傍セルに到達するか、または、リーフセルに遭遇すると停止することにより、セルの左近傍セルの位置を検出することができる。
【００６３】
一例として、セル５０１、［０．２５，０．５）の可能な限り最小の左近傍セルは、ｘ位置コード００１０００−０００００１＝０００１１１を有する。この位置コードを用いて、２分木４００をルートセルから下方に向かって巡回し、リーフセルに到達すると停止することによって、セルの左近傍セルとして、位置コード５０４、０００１００を有するセル５０３、［０．１２５，０．２５）が得られる。
【００６４】
Ｎ次元２分木については、リーフセルに遭遇するか、または、指定された最大の木巡回レベルに到達するまでの近傍セルへの一組のＮ個の位置コードの分岐パターンに従うことによって、近傍セルの位置を検出することができる。近傍セルへのＮ個の位置コードは、指定された方向から求められる。指定された方向は、対応するセルの境界を求める。２次元２分木では、右端の近傍セルのｘ位置コードが、セルの右境界から求められ、右上端の頂点近傍セルのｘ位置コードおよびｙ位置コードは、セルの上境界および右境界から求められる。
【００６５】
例えば、２次元２分木、すなわち４分木では、所定のセルのサイズ以上のサイズを有する右端近傍セルは、リーフセルに到達するか、または、所定のセルと同じレベルのセルに到達するかのいずれかまで、所定のセルの右境界のｘ位置コードおよび所定のセルのｙ位置コードを備える近傍セルの位置コードを用いて、ルートセルから下方に向かって巡回することにより、その位置を検出する。
【００６６】
第２の２次元の例として、所定のセルの左下端のリーフセルの頂点近傍セルは、リーフセルに遭遇するまで、所定のセルの可能な限り最小の左近傍セルのｘ位置コードおよび所定のセルの可能な限り最小の下端の近傍セルのｙ位置コードを用いて、ルートセルから下方に向かって、２次元２分木、すなわち４分木を巡回することにより、その位置を検出する。
【００６７】
所望の近傍セルの位置コードが求められた後、所望の近傍セルは、ルートセルから下方に向かって２分木を巡回することにより発見することができる。しかしながら、まず、所定のセルから、当該所定のセルおよびその近傍セルの最小の共通の先祖へ上方に向かって２分木を巡回し、次に、この最小の共通の先祖から近傍セルへ下方に向かって２分木を巡回することが、より効率的であり得る。これについては、H. Samet著の「Applications of Spatial Data Structures: Computer Graphics, Image Processing, GIS」, Addison-Wesley, Reading, MA, 1990を参照されたい。
【００６８】
都合が良いことに、我々の位置コードは、この最小の共通の先祖を求める効率的な手段も提供する。１次元２分木を仮定すると、近傍セルの位置コードが、上述したように、所定のセルおよび所定の方向から求められる。次に、所定のセルの位置コードが、近傍セルの位置コードとＸＯＲ操作され、不一致(difference)コードが生成される。次に、不一致コードの対応するビットが０である最初のレベルに到達するまで、２分木が、所定のセルから上方に向かって巡回される。この不一致コードの対応するビットが０である最初のレベルは、その２つの位置コードが同じである最初の分岐点を示す。我々は、これを停止レベルと呼ぶ。このように停止レベルへと上方に向かって巡回することによって到達したセルが、所定のセルおよびその近傍セルの最小の共通の先祖である。
【００６９】
Ｎ次元では、セルのＮ個の位置コードが、その近傍セルのＮ個の対応する位置コードとＸＯＲ操作され、Ｎ個の不一致コードが生成される。Ｎ個の不一致コードを用いて上方に向かって巡回することによって到達する最も高いレベルのセルが、最小の共通の先祖である。
【００７０】
第１の例として、１次元２分木４００のレベル３のセル５０１、［０．２５，０．５）とその右近傍セルとの不一致コードは、００１０００＾０１００００＝０１１０００となる。２分木をレベル３から上方に向かって巡回することは、この不一致コードにおけるビット３の左側のビットを検討することを意味する。最初の０のビットは、ＬＥＶＥＬＲＯＯＴに到達する。したがって、セル５０１およびその右近傍セルの最小の共通の先祖は、ルートセルとなる。
【００７１】
第２の例として、１次元２分木４００のレベル３のセル５０５、［０．７５，１）とそのリ左近傍セルとの不一致コードは、０１１０００＾０１０１１１＝００１１１１となる。ビット３の左側のビットを検討すると、最初の０のビットは、ビット４にあり、これはレベル４のセルに対応する。したがって、セル５０５およびその左近傍セルの最小の共通の先祖は、このセルの親セル５０６となる。この親セルは、位置コード５０７、０１００００を有する。
【００７２】
用途に応じて、近傍セル探索のいくつかの異なる変形形態が必要とされることがある。例えば、所定のセルと少なくとも同じサイズの最小の左近傍セルの発見および所定のセルの指定された頂点に接するリーフセルの近傍セルのすべての発見が必要とされることがある。
【００７３】
本発明による近傍セル発見方法には、従来の方法を上回るいくつかの利点がある。第１に、我々は、それぞれの次元を独立に取り扱うので、我々の方法は、任意の次元数で機能する。これと対照的に、従来技術の方法は、２次元２分木および３次元２分木にのみ機能するテーブル検索を使用する。これらテーブルの構成は、２次元および３次元の空間の関係を視覚化できることを頼りにしていた。したがって、より高次元にこれらのテーブルを拡張することは、極めて困難であり、誤りを起こしやすく、かつ、検証するのに時間がかかる。実際、より高次元の２分木は、コンピュータビジョン、科学的可視化、および色彩科学といった分野で非常に有用であるが、これら高次元の２分木の近傍セル探索用のテーブルは知られていない。
【００７４】
第２に、我々の方法は、メモリアクセスを必要とする従来のテーブル検索を、ビット操作の形態の単純なレジスタベースの計算と交換する。これは、プロセッサ速度がメモリ速度を超える現代のシステムアーキテクチャにおいて有利である。高速のキャッシュメモリを有する現代のシステムでさえ、アプリケーションデータおよびテーブルデータは、多くの実際のアプリケーションで、キャッシュの獲り合いを行う。この獲り合いは、メモリからテーブルデータを頻繁に再ロードすることを強いることになり、したがって、テーブルベースの従来技術の方法の性能を劣化させている。
【００７５】
その上、従来技術の近傍セル探索方法およびテーブルは、限定された種類の近傍探索用に考案されてきた。従来の近傍セル探索は、面、端、および頂点の近傍セルに対して異なる方法を必要とし、「頂点近傍セルはかなり複雑である」。これについては、H. Samet著の「Applications of Spatial Data Structures: Computer Graphics, Image Processing, GIS」, Addison Wesley, Reading, MA, 1990を参照されたい。これと対照的に、我々の方法は、すべての種類の近傍セル探索に単一の手法を使用する。さらに、従来技術のテーブルは、所定のセル列挙用に特殊化されており、異なるセルのラベル付け規則に対しては、再定義を行わなければならない。異なる規則および異なるタイプの近傍セル探索用のテーブルを生成することは困難であり、誤りを起こしやすく、かつ検証するのに時間がかかる。
【００７６】
最後に、我々の近傍セル探索方法は、本質的に非再帰的で、必要とされるブール演算数は、従来の方法よりも少ない。これと対照的に、従来の近傍セル探索方法は、本質的に再帰的であり、再帰を解きほぐすことは簡単ではない。４分木および８分木用の非再帰的近傍セル探索方法は、Bhattacharyaによって、「Efficient Neighbor Finding Algorithms in Quadtree and Octree」, M.T. Thesis, Dept. Comp. Science and Eng., India Inst. Technology, Kanpur, 2001に記述されている。しかしながら、その方法は、セルと同じサイズまたはセルより大きなサイズの近傍セルの発見に限定される。その上、Sametの方法と同様に、その方法は、適切な近傍セルを求めるのに、テーブルベースの巡回を必要とする。したがって、その方法は、上述したのと同じ従来の近傍セル探索方法の制限に苦しむことになる。
【００７７】
レイトレーシング
３次元２分木、すなわち８分木に記憶された３次元図形オブジェクトのレイトレーシングは、当該２分木を通過する光線に沿ったリーフセルの順序列を求めること、それぞれの空でないリーフセルが光線面（ray-surface）と交差しているかどうかを判定すること、および光線面の交差を処理することを必要とする。
【００７８】
３次元のレイトレーシングは、コンピュータグラフィックスで広く使用されている。その上、電気通信、ロボット工学、およびコンピュータビジョンといった分野では、Ｎ次元２分木を通過する光線に沿ってリーフセルの順序列を求める多くのアプリケーションが存在する。
【００７９】
図７に示すように、本発明によると、第１のステップは、光線７０１が、２次元２分木に最初に入る点７０２を求める。第２のステップは、点７０２に対して我々の点の位置検出方法（上述）を用いて、リーフセル７０３およびその位置コードを求める。第３のステップは、光線停止条件、例えば「セル内に光線面交差が存在するか」を知るためにセル７０３を判定する。
【００８０】
判定が偽であるならば、光線７０１に沿った次のセル７０６の位置コードが、セル７０３の位置コード、光線７０１の方向、およびセル７０３のサイズから２つのステップで求められる。
【００８１】
第１のステップは、その値がセル７０３の最大頂点または最小頂点の対応する座標値と等しい出口点７０５の座標の一部を求める。この一部は、光線７０１がセル７０３を出ていく場所に依存する。例えば、光線７０１は、セル７０３の右端７０４でセル７０３を出て行くので、この一部は、出口点７０５のｘ座標からなる（ただし、ｘ＝ｘＭＡＸ（ｃｅｌｌ７０３））。この座標の一部は、次のセル７０６への位置コードの対応する一部を求める。次のセル７０６は、上述した本発明の近傍セル探索方法によってセル７０３の位置コードおよびサイズから次に求められる。
【００８２】
第２のステップは、第１のステップで求められた位置コードおよび光線７０１の方程式から、次のセル７０６への残りの位置コードを求める。最後に、次のセル７０６への位置コードは、上述した本発明の近傍セル探索方法によって、２分木を上方に巡回してセル７０３および７０６の共通の先祖へ向かい、かつ、２分木を下方に巡回して近傍セル７０６に戻るために使用される。
【００８３】
光線７０１に沿って次のセルを求めるこのプロセスは、光線７０１に沿ったリーフセルの順序列を求めるために、光線停止条件が満たされるまで繰り返される。
【００８４】
我々の方法は、レイトレーシング用のトップ−ダウン木巡回手法およびボトム−アップ木巡回手法の双方に適用することができる一方、従来技術で使用されるブール演算、再帰、および可能な限り最小のリーフセルに比例した増分で光線に沿って進める処理を回避する。
【００８５】
本発明について、好ましい実施の形態を例にして説明してきたが、本発明の精神および範囲内において、さまざまな他の適用および変更を行い得ることが理解されるべきである。したがって、併記の特許請求の範囲の目的は、本発明の真の精神および範囲内に入るこのようなすべての変形形態および変更形態を包含することである。
【図面の簡単な説明】
【００８６】
【図１】本発明による２次元２分木のデータ構造を示す図である。
【図２】本発明による２次元２分木の空間分割を示す図である。
【図３】典型的な従来技術の点の位置検出方法のフローチャートの図である。
【図４】本発明による１次元２分木の階層的なツリー構造（木構造）および関連する位置コードを示す図である。
【図５】本発明による１次元２分木の空間分割および関連する位置コードを示す図である。
【図６】本発明による点の位置検出のフローチャートの図である。
【図７】本発明による２次元２分木と交差する光線を示す図である。
【図１】
2004164596.tif 000003
【図２】
2004164596.tif 000004
【図３】
2004164596.tif 000005
【図４】
2004164596.tif 000006
【図５】
2004164596.tif 000007
【図６】
2004164596.tif 000008
【図７】
2004164596.tif 000009
【外国語明細書】
2004164596.tif 000010
2004164596.tif 000011
2004164596.tif 000012
2004164596.tif 000013
2004164596.tif 000014
2004164596.tif 000015
2004164596.tif 000016
2004164596.tif 000017
2004164596.tif 000018
2004164596.tif 000019
2004164596.tif 000020
2004164596.tif 000021
2004164596.tif 000022
2004164596.tif 000023
2004164596.tif 000024
2004164596.tif 000025
2004164596.tif 000026
2004164596.tif 000027
2004164596.tif 000028
2004164596.tif 000029
2004164596.tif 000030
2004164596.tif 000031
2004164596.tif 000032
2004164596.tif 000033
2004164596.tif 000034
2004164596.tif 000035
2004164596.tif 000036
2004164596.tif 000037
2004164596.tif 000038
2004164596.tif 000039
2004164596.tif 000040
2004164596.tif 000041
2004164596.tif 000042
2004164596.tif 000043
2004164596.tif 000044