web-dev-qa-db-ja.com

3Dでラインとポリゴン間の交差を決定するためのデータ構造

自己重複しない単純なポリゴンPのコレクションがあります。実際、これらは3D空間の2D三角形です。

ラインLが与えられ、Lが交差するP内のすべてのポリゴンpに対して比較的高速なルックアップを持つデータ構造を探しています。それが私に交点を与えることができるならそれはおまけですが、とにかく私がポリゴンを手に入れればそれを自分で計算することができます。

以前はkd-treesとred-black-treesを使ったことがありますが、それらはポイントを扱っているので、私の問題により適したデータ構造があることを期待しています。 BSPツリーのようなものになると思いますが、他の提案も受け付けています。

6
elsurudo

octree を利用してみてください。これはあなたが探しているポリゴンセットを正確に与えるわけではありませんが、ポリゴンのセット全体よりもかなり小さいかもしれないスーパーセットです(もちろん、これがどのようにうまく機能するかは、ポリゴンとそれらが空間にどのように分布しているかによって異なります)。

問題の規模に適したツリーの特定の「最大深度」を選択します。境界ボックスがその立方体に接しているポリゴンを各「葉」立方体に関連付けます。ポリゴンを探すときは、線が触れている葉の立方体を特定し、関連するポリゴンのみを考慮に入れます。

2
Doc Brown

シーンが静的である場合(つまり、三角形が移動しないため、すべてのラインにわたって加速度データ構造の構築を償却できる場合)、 高度に最適化されたkdツリー はまだ状態であると思いますこの目的のための芸術。それらは有限の範囲を持っているので、三角形はkdツリーツリーの複数のブランチと重なる場合があります。ただし、これはどのBSPタイプの加速構造にも当てはまります。

加速構造の代替クラスは R-tree で例示されています。 kd-treeと同様に、R-treeノードには軸に沿った境界ボックスがあります。ただし、Rツリーでは、兄弟ノードの境界ボックスが重複する場合があります。

一般的な意味では、ほとんどの既知の加速構造は、RツリーのようなものかBSPのようなものです。

1
comingstorm