2Dオブジェクト整列境界ボックス交差テスト


9

2つのオブジェクト配置の境界ボックスがあります(つまり、軸配置ではなく、オブジェクトとともに回転します)。オブジェクトに配置された2つのボックスが重なっているかどうかを知りたい。(編集:注-私は軸に沿った境界ボックステストを使用して遠くのオブジェクトをすばやく破棄しているので、クワッドルーチンが少し遅いかどうかは関係ありません。

私の箱は4つのX、Yポイントとして保存されます。答えを探して回りましたが、例の中の変数名とアルゴリズムを理解して、特定のケースに適用することはできません。

誰かがこれがどのように行われるかを明確かつ簡単な方法で教えてくれますか?ありがとう。(特定の言語は重要ではなく、Cスタイルの疑似コードで問題ありません。)

回答:


5

どこを見ればわかるかは簡単です。あなたはoobbを探しています。ここに移動:http : //www.realtimerendering.com/intersections.html
そこにこのサイトへのリンク http://www.geometrictools.com/LibMathematics/Intersection/Intersection.htmlが
あり、そこに正しいコードがあります。(Ctrl + F「ボックスの交差(2D)」)

SATを使用し、ソースコードと記事が含まれています。


geometrictoolsによって記述されたアルゴリズムは、私が指摘したものです。
Jari Komppa、2011年

これは4年前のことだと思いますが、常に反対票などについて説明しています。これはかなり「あなたの答えは別の城にあります」であり、2番目のケースでは答えがそこにないようです。
ヤン2015年

2

より簡単な方法は、おそらくボックスAの両側に対してボックスBの各頂点をテストすることです(符号付き距離を計算します)。このようにして、各頂点をセグメントの「前」または「後ろ」に分類できます。

Bのすべての頂点がAのセグメントの1つの「前」に分類される場合、BとAは重複しません。それ以外の場合は、そうします。

これは多少複雑なので、正方形の境界円を使用して最初に円と円のチェックを行うと、パフォーマンスが向上する場合があります(計算は簡単です)。


私は最初に、軸に沿った境界ボックステストを行って、離れたオブジェクトをすばやく破棄します...クワッドクワッドテストの詳細はありますか?
AshleysBrain、2011年

同じトランスフォームで両方のクワッドを一時的に回転させ、それらの1つが軸合わせされるようにします。次に、前述のSATテストを使用します。結果が見つかったら、回転を反転して元に戻します。
スティーブH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.