• ベストアンサー

多角形ポリゴン同士の衝突判定をしたいのですが。。。

3次元上に2つの多角形ポリゴンをCGで描きました。この2つの物体の衝突判定を 行いたいのですが、数学では、このような問題はどのように解くのでしょうか? もう少し詳しく述べると、多角形は三角形の集合で描かれています。 2つの多角形をA、Bとすれば、Aをなす三角形とBをなす三角形が 重なる、もしくは、交わらなければAとBは衝突していないことになると思うのですが、どうでしょうか? 2つの三角形が衝突していないということを表す式、考え方がありましたら 教えてください。また、それ以外にベストと思われる式、考え方がありましたら 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • bear-3
  • ベストアンサー率42% (26/61)
回答No.2

こんにちは。 三次元シミュレーションなどで実際によく利用されているのは、 点が面の中に収まっているかを判定、点と面の距離を計算 で接触判定はよく行われています。 上記のような計算を行うには、ベクトルによる計算が用いられます。 参考1: http://hp.vector.co.jp/authors/VA013845/algorithm/index.html 参考2: http://osaka.cool.ne.jp/pevips/rg2.shtml ベクトルによる計算の詳しい説明については、ここでは割愛させて頂きます。

参考URL:
http://osaka.cool.ne.jp/pevips/rg2.shtml

その他の回答 (1)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

普通に考えると、それぞれの三角形を延長した平面同士が交わる直線を求め、その直線と三角形の共通部分となる線分が存在するかどうか調べ、それがどちらの三角形に対しても存在すればその共通部分それぞれが重なっているか調べればいいでしょう。 三角形と直線が交差するかどうかは、三角形の3つの頂点が直線にからみて同じ側に集まっていないことをたしかめればいいでしょう。 しかし、上記の計算を各ポリゴンを構成するすべての三角形同士でやらなければなりませんね。複雑なポリゴンならとんでもない計算量でしょう。 目的は何でしょう? ご質問の趣旨と外れますが、ゲームをお作りになるのでしたら、もっと簡易な方法でやることをおすすめします。 特にシューティングゲームの場合は、各ポリゴンの中心となる点を決め、その点同士の距離が一定以下なら衝突、とやるのが一般的です。その判定基準も実際のポリゴンよりかなり小さめにとった方がゲームとしておもしろくなります。

関連するQ&A

  • 物理の「弾性衝突」に関する問題です。

    物理の「弾性衝突」に関する問題です。 以下問題文です。  静止している物体Bに,速さ10m/sで運動する物体Aが  図のように衝突した。  物体A,Bの質量はそれぞれ2kg,3kgで弾性衝突だった。  衝突後の物体A,Bの速さを求めよ。 一般的な解法である運動量保存則を水平方向,垂直方向に適用するも 衝突後の方向がつかめず立式に至りません。 どなたかお知恵を賜れる方宜しくお願いします。

  • 物理シミュレータを自分で組んでいるのですが、物体の衝突判定のために物体

    物理シミュレータを自分で組んでいるのですが、物体の衝突判定のために物体周りのディスタンスフィールドを構築しようとしています。そのために、物体周りの各格子点からオブジェクトの一番近いメッシュへの距離を求めたいです。 そこで質問なのですが、三次元空間上のある点から、同じく三次元空間上の三角形までの最小距離はどのように求めればよいでしょうか?直線と三角形の交差判定+線分と直線の交差判定を組み合わせれば実装出来そうな気がしますが、もっと簡単な方法がないものかと思って質問させていただきました。 またそもそもディスタンスフィールドを構築出来るもっと良い方法があれば教えてください。 わかりにくい説明ですみません。 よろしくお願いします。

  • 完全弾性衝突

    高校物理の分野の質問です。 同じ質量の物体Aと物体Bがある。 物体Aが速度vで静止している物体Bに衝突する。 衝突後、物体Aは静止し、物体Bは速度vで動き出す。 この衝突は完全弾性衝突である。 とあるのですが、このようになる理由を物理的に教えてください。

  • CGプログラミングで前のポリゴンに隠れているポリゴンをレンダリングしない方法はありますか?

    CGのレンダリングの質問です。 カメラが座標(-10,0,0)から(0,0,0)を見ています。 そのときに3角形AとBがあり、それぞれの頂点が: A(0,0,0)(0,0,10)(0,10,0) B(2,0,0)(2,0,3)(2,3,0) となってBがAに隠れています。 簡単なOPENGLのプログラムでは: glBegin(GL_TRIANGLES); // draws triangle glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 10.0f); glVertex3f(0.0f, 10.0f, 0.0f); glEnd(); glBegin(GL_TRIANGLES); // draws triangle glVertex3f(1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 0.0f, 5.0f); glVertex3f(1.0f, 5.0f, 0.0f); glEnd(); gluLookAt(-10.0,0.0,0.0, //Where should the camera locate 0.0,0.0,0.0,//Where to look at 0.0,0.0,1.0); //Which is up in CG ... となるのですが。 今回のようにポリゴンが2つで済む時にはすべてをレンダリングしてもなんともないのですが、私のプログラムでは複雑に配置されたポリゴンがたくさんある3D地図なので、どうしても後ろのポリゴンを書かなくてもよいように判定をしたいのです。 どなたかどのポリゴンが視覚に入るか判定できるアルゴリズムのようなものをご存知でしたらご教授いただけるでしょうか?

  • 物体の衝突する高さ

    地面から初速度vで物体Aを鉛直上方に投げ上げる。Aが最高点に達した瞬間に別の小物体BをAと同じ位置から初速度vで鉛直上方に投げ上げたところ、AとBが衝突した。重力加速度の大きさをgとする。 (1)小物体Aを投げ上げた時刻を0とする。AとBガ衝突するまでの時刻tにおけるAの速度はいくらか。ただし、鉛直上向きを正とする。 (2)Aが達する最高点の高さはいくらか。 (3)Bを投げ上げた後AとBが衝突するまでの間において、Bに対するAの速さについて、横軸を時間、縦軸を早さとしたグラフはどうなるか。 (4)AとBが衝突する高さhはいくらか。 (1)-(3)までは分かるのですが、(4)がよくわかりません。 BからみたらAはh(m)を等速vで近づく。衝突する時刻をt1とすると、t=t1のとき、AはBのところへくるからt1=h/vである…。 と書いてあったのですが、よく理解できません。 BからみたらAはh(m)を等速vで近づく。というのがよく分かりません。あと、t1=h/vもよく分かりません。衝突する時刻に高さがhとは限らないのに、どうして式にhがでてくるのでしょうか。

  • 二つの物体の衝突

     二つの物体が衝突したときの衝撃度が知りたいです。物体Aが時速100キロで止まっている物体Bに衝突したときの衝撃の大きさを測る方法を教えてください。二つの物体の質量はどれくらいでもいいです。できればわかりやすくお願いします。

  • 2物体の衝突

    問題文 質量mの物体Aに初速度を与えて、質量Mの物体Bに衝突させたところ、衝突後のA,Bの速度はこれこれになった。 ふと思ったのですが、床に二つの球が描かれている図が問題文の横にありますが、球と床間は滑らかで摩擦力が働かないことを前提としているのでしょうか。ただ、滑らかだという条件は問題文にありません。もし摩擦力という外力が働いたら、運動量保存則は適用できなくなり、問題が解けませんよね。 どなたか教えてください。

  • 物体衝突時の力積

    問1 500kgの物体Aが速度10m/sで東に向かって運動していた。 そのとき、後ろから質量1500kgの物体Bが速度30m/sで追突し、合体した。衝突後のAとBの速度を求めよ。またこの衝突によってBが受けた力積を求めよ。ただし、東方向を正とする。 問2 問1の衝突が完全弾性衝突のとき、衝突後の物体A、物体Bのそれぞれの速度を求めよ。また、衝突で及ぼし合った力積を求めよ。 問3 力持ちの具体的な例を挙げ(ここでは重量挙げ)、それが力積であることを説明せよ。 大学の教養科目のプリントの問題です。講師の説明がいまいち聞き取りにくくてよく分かりませんでした。 もし、分かる方がいらっしゃったなら、ご回答をお願いします。

  • ばねの付いた物体との衝突について

    次の問題がわかりません。 どなたか解説をお願いします。 水平な台の上に質量Mの物体Bが置かれている。 この物体Bは、ばね定数kのばねで質量M'のおもりCにつながれている。 はじめ、このばねは自然長の状態にある。 質量mの物体Aが速度voで台を滑り、物体Bと完全非弾性衝突をして、 一緒になってばねを押し縮めた。 その後、ばねの反発によって逆向きに戻り始めた。 ばねが自然長の状態に戻ったとき、物体Aと物体Bは お互いに力を働かせあうことなく離れた。 おもりCは物体Aと物体Bの動きにともなって移動することはなかった。 物体Aおよび物体Bと台の表面では摩擦は生じない。 おもりCと台の静止摩擦係数をμとする。 物体Aが物体Bと離れるときの物体Aの速さを求めよ。 衝突直後の速さは出せたんですけど、その後が…。 よろしくお願いします。

  • 物理。衝突分野… よくわかりません。至急!!

    質量m1、m2の2つの物体A,Bがあり、Aは静止している物体Bに早さv0で衝突して、その後それぞれが速度v1、v2となる現象について(1)~(3)の場合について考察した。速度の正方向は右、運動は一直線上、エネルギーのやり取りは互いの間のみ、摩擦は考えないとする。 (1)2つともに非常に硬い金属でできていて、衝突後になんの変形もしないとき、v1=(ア)×v0、v2=(イ)×v0である。 (2)AがBを押す時少し仕事をし、それによって衝突後少し変形した。この変形に要した仕事をW(≧0)とする。衝突の前後で保存される量の関係からv1を求め、v0、m、Wで表わすと、(ウ)となる。そこで、v1:v2=1:2となった時、Wは物体Aの入射エネルギー(1/2)mv0^2 の(エ)倍であることが分かり、Wが(1/2)mv0^2 の(オ)倍の時、2物体は同じ速度となる。 (3)BのAと衝突する面に質量の無視できる爆薬を塗った。爆発で出来るエネルギーQはA,Bにすべて与えられるとする。また、A、Bは爆発に伴うへんけいもせず、おんどもあがらないとする。この衝突でのエネルギー保存則を表す式は(カ)とかけ、衝突後の物体Aの速さは((キ))である。