動く球体間の衝突を検出するための良いアルゴリズムは何ですか?


27

(衝突検出の目的で)3Dオブジェクトが球体でゲーム内で表現される場合、球体間の衝突を検出するための良いアルゴリズムは何ですか?

各オブジェクトに最後のフレームの位置と新しい(望ましい)位置がある場合、球体が前のフレームで交差せず、2番目のフレームで交差しない衝突を識別するための優れたアルゴリズムは、しかし、それらはその間のどこかで交差しましたか?

回答:


18

基本的に、トレースを探しています。

このページはおそらく役立つでしょう:http : //www.realtimerendering.com/intersections.html

移動球/球:(位置)移動球の半径を静的球に追加し、移動球を光線として扱います。この光線を使用して、光線/球体の交差を実行します。ゴメスを参照してください。Schroeder for code(記事には派生にバグがあり、コードは問題ありません); およびRTR2、p。622。


1
両方の球体が動いた場合、それは機能しません(2回行っても機能しません)。動きaにまたがる線と、動きbにまたがる線との間の距離チェックを最初に行わなければならないと思われます。その後、その時点が球aのどこにあるか、球bがどこにあるかを確認して、時間が近いかどうかを確認します。その場合は、そのポイントの時間内の距離に対して速度をチェックし、それがまだ衝突の可能性がある場合は、段階的な改良を行います。
カイ

15
実際には、動きを相対的にする必要があります。したがって、両方の球体が動いている場合は、両方の球体から一方の球体の速度を引くだけで、1つの「動く」球体と1つの「静止する」球体が得られます。その後、上記を使用できます。
テトラッド


4

私の頭の上から:

  1. 各円の中心から、そのタイムステップで開始した場所から移動した場所までの2つの線分を作成します。
  2. これらの2つのラインセグメント間の最小距離を見つけます。ここで説明されているように
  3. その距離が最初の円と2番目の円の半径以下の場合、それらは衝突しました。そうでなければ、彼らはしませんでした。

そして、それはそれですべてです、私はそれがかなり速いと期待するでしょう。


1

ここにもう1つの素晴らしいGamasaturaの記事があります。


1
これは7年後だと思いますが、この答えはリンクのみです。幸いなことに、リンクはまだ生きていますが、もしそうでなければ、あなたの答えは...答えではありません。
Draco18s

0

これを行った誰かとして話す:それは面倒の価値はありません。ゲームデザインが絶対に必要としない限り、そしてほぼ確実に必要としない限り、あなたはあなたが本当に期待するよりもはるかに多くの努力を費やすでしょう。そして、それはあなたが望んでいたよりも遅くなります。


彼はあなたが知っているすべてのためのプールゲームを作っている可能性があります。
カイ

彼がプールゲームを作っているなら、彼の「ゲームデザインは絶対にそれを必要とします」
deft_code

あなたは正しい、車輪を再発明しないください。しかし、練習のためだけに価値があるかもしれません。
user712092

4
は答えとしての直接的な落胆に反対します
ボボボボ

私は@boboboboに同意します、質問は面倒の価値があるかどうかではなく、このスレッドを見た将来のユーザーは費用に関係なく絶対に答えを必要とするかもしれません。これはコメントとして良いでしょう。
-TomTsagk

0

Flipcodeの数学による衝突検出の導出に関する記事があります。サークルサークルがあります。衝突点を正確に検出し、衝突があるかどうかを確認する方法があります。


これは7年後だと思いますが、この答えはリンクのみです。幸いなことに、リンクはまだ生きていますが、もしそうでなければ、あなたの答えは...答えではありません。
Draco18s

0

移動物体の衝突検出は通常「掃引体積計算」と呼ばれます。この主題に関するいくつかのコード/記事があります。

http://www.gpu-voxels.org/demos/(デモ)

ソースコードライブラリ:

https://github.com/fzi-forschungszentrum-informatik/gpu-voxels

https://libigl.github.io/tutorial/#swept-volume

https://github.com/gradientspace/geometry3Sharp

記事:

http://gamma.cs.unc.edu/SV/sm03.pdf

https://www.cs.columbia.edu/~allen/PAPERS/abrams.swept.pdf (残念ながらソースコードはありません)

http://www.realtimerendering.com/intersections.html (リンクのかなり重いコレクション)


1
リンクのみ(またはこの場合は複数)を含む回答には、実際の回答は含まれません。これらのリンクが機能しなくなっても投稿が理解できるように、投稿に関連情報を含める必要があります。
Draco18s

リンクの背後にある情報は、現時点では私よりもわずかに優れています。リンクの背後にあるデモビデオもあり、リアルタイムで何が起こっているのかをある程度理解できます。
-TarmoPikaro

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.