kdツリーの交差ロジックとは何ですか?


12

KDツリーを実装する方法を見つけようとしています。

エリクソンによる「リアルタイム衝突検出」の322ページ

リンクをクリックしたときにGoogleブックのプレビューで表示できない場合に備えて、テキストセクションを以下に示します

テキストセクション

関連セクション:

光線または有向線分とkdツリーの交差の背後にある基本的な考え方は簡単です。線はノードの分割平面と交差し、交差のt値が計算されます。tが線の間隔(0 <= t <= tmax)内にある場合、線は平面にまたがり、ツリーの両方の子が再帰的に下降します。そうでない場合、セグメントの原点を含む側のみが再帰的にアクセスされます。

だからここに私が持っているものがあります:(レタリングが表示されない場合、新しいタブで画像を開きます)

画像

論理ツリー

div

オレンジ色の光線が3Dシーンを通過しています。xは平面との交差を表します。左から、光線が当たります:

  • シーンを囲むキューブの前面、
  • (1)分割面
  • (2.2)分割面
  • シーンを囲むキューブの右側

しかし、上記のEricsonの基本的な説明に素直に従うと、次のようになります。

  • 分割面に対してテストします(1)。光線は分割面(1)に当たるため、分割面(1)の左右の子は次のテストに含まれます。
  • 分割面(2.1)に対してテストします。レイは実際にその平面にぶつかるので(右に向かって)、両方の子が次のレベルのテストに含まれます。(これは直感に反します-最下位ノードだけを後続のテストに含めるべきではありません)

オレンジ色の光線がシーンを正しく通過したときに何が起こるかを説明できますか?

回答:


14

本当に簡単です。次の理由により、分割面(2.1)に対するテストは失敗するはずです。

光線が分割面に当たると(1)、「光線を分割する」、または t有効な-range を設定し、結果のパーツでツリーを下に進みます。

したがって、プレーン(2.1)をチェックするときは、プレーン(1)の左側のレイの部分のみがプレーン(2.1)と交差するかどうかをチェックする必要がありますが、交差しません。あなたが話す「右へ遠い」交差点にはttあなたは飛行機(1)で線を分割した値を。

それが十分に明確であることを願っています。

概要:後続のレイ/プレーンの交差は、レイの一部を問題のプレーンで分割した後に残った状態でのみ行う必要があります。


1
Grr !! (偉大な答えの略)
bobobobo

いい答えTorious!GDSEへようこそ。
マイケルハウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.