2011-06-29 34 views
2

この質問の長さをお詫び申し上げます。2Dから3DへのGJK衝突検出の実装

私はここ数日間、GJKアルゴリズムを使いました。私はそれの背後にある一般的な概念を理解し、http://www.codezealot.org/archives/88のWilliam Bittleによるすばらしい記事のおかげで2Dでのその実装の根っからの味が大部分を理解しています。

擬似コード(記事の最後にあります)を自分のC++プロジェクトに実装しましたが、私は3D実装をしたいと思います。私の弱点は、ドットプロダクトを使ってボロノイ領域とトリプルプロダクトをテストして、パンパンラインを得ることになります。しかし、私はそれについてもっと読むことを試みている。

私の問題は、containsOrigin関数に帰着します。 z軸が追加する新しいボロノイ領域を視覚化し、説明するのに問題があります。私はちょうどどの地域に原点が含まれているかを調べる方法を頭の中で包んでいるようには思えません。私は四面体のシンプレックスの4面を構成する三角形の平面からそれぞれ4つを考慮しなければならないと仮定します。起源がこれらの領域のいずれにも属していない場合は、それが含まれており、衝突が発生しています。

特定のボロノイ領域に含まれているか、三角形の面が原点の方向を指しているかどうかをテストするにはどうすればよいですか?

現在の2Dアルゴリズムは、三角形が作成されているかどうかをチェックし、三角形が作成されていない場合は、単体が線であり、三番目の点を見つけます。私は四面体が作成されているかどうかをチェックして3Dアルゴリズムを仮定します。そうでない場合は三角形をチェックし、真なら四面体を作るために四番目の点を探します(これはどのようにして得られますか?起源は?)。もし私が作っていないなら、それは三角形を作るために3番目の点を見つけるでしょう(私はまだ2Dのようにこれに対して三重積を使いますか?)。

すべての提案、概要、リソース、コードの拡張、コメントは非常にappretiatedです。あなたはモリーロケットからこの素敵なチュートリアルで見たいと思うかもしれませんGJKアルゴリズムから期待する結果と内容に応じて

答えて

3

https://mollyrocket.com/849

彼の実装では、唯一の交差点を出力することをしかし注意してください?はい・いいえ。しかしそれは良いスタートかもしれない。