ページ 11

回転する四角形同士の当たり判定について

Posted: 2012年9月07日(金) 00:06
by AXL
http://www.c3.club.kyutech.ac.jp/gamewi ... ontent_1_5
此方のサイトを参考にして四角形のクラスを作っていたのですが、
「四角形を形成する5つの点がそれぞれ判定したい四角形の範囲にあるかないかで四角形同士の衝突を判断する」
という感じの内容なのですが、
・極端な長方形同士の場合、その四角形の中に新しく点を作成してそれを使って判定する
という解説に理解できますが、納得が行きません。
それこそ、四角形を形成する4つの辺のそれぞれが、判定したい四角形のそれぞれの辺に触れていないか
というほうが綺麗だと思うのですが、これではどちらかが片方を完全に内包した時に判定ができません。

①また、解説の一部がよくわからないのですが
>さて、ここで問題なのが三角形の法線を取得しないといけないと言うことです。
>四角形の場合は簡単にもとまりますよね。点と点を取ってその座標を引けば求まります。
>ですが、三角形の場合は外積を使って求めます。
法線というのはある直線から伸びる垂直な直線(90度)であって、点から伸びるようなものではないと思うのですが、
四角形の対角線の交点と、各辺の最短距離を結ぶ線ということなのでしょうか?

②360度回転する四角形と点で、もっとわかりやすい判定方法はないですか?
片方の四角形の回転分だけもう片方が回転したと想定したローカル座標で点を判定するというのも思いついたんですが、実用的なのかよくわからないです。

もっと言えば、
・回転する四角形と点の判定
・辺と辺の判定
を両方すれば確実に判定できるとは思うのですが、
③他に綺麗な定式はないのでしょうか?

偉そうに質問に番号を振ってしまいましたが、答えてもらえたら幸いです。

Re: 回転する四角形同士の当たり判定について

Posted: 2012年9月07日(金) 07:59
by h2so5
AXL さんが書きました: ①また、解説の一部がよくわからないのですが
>さて、ここで問題なのが三角形の法線を取得しないといけないと言うことです。
>四角形の場合は簡単にもとまりますよね。点と点を取ってその座標を引けば求まります。
>ですが、三角形の場合は外積を使って求めます。
法線というのはある直線から伸びる垂直な直線(90度)であって、点から伸びるようなものではないと思うのですが、
四角形の対角線の交点と、各辺の最短距離を結ぶ線ということなのでしょうか?
文章から判断する限り、三角形の各辺の法線を取得するという意味だと思います。
四角形の場合は簡単にもとまるというのは正確ではなくて、実際には長方形の場合の話ですね。

Re: 回転する四角形同士の当たり判定について

Posted: 2012年9月07日(金) 09:15
by AXL
長方形を2つに分割して三角形を作り、それぞれ3つの辺がすべてマイナスの値なら三角形の内側にあるということですよね
わざわざ分割して三角形の3つの辺で法線で判定するのは何か意味があるのでしょうか?
長方形ならその方法でそのまま判定できると思うんですけど・・・

Re: 回転する四角形同士の当たり判定について

Posted: 2012年9月08日(土) 21:24
by GRAM
上記の判定方法ははっきり言うと微妙だと思います。
というより筆者が単にもっと良い方法を知らないだけかと。明らかに冗長でよくない仮定が含まれています。
分離軸判定というものを調べてみればよろしいかと。
長方形ならよほどベクトルの縮退がない限り(アスペクトレシオが10の何十乗とか)確実に判定できます。

Re: 回転する四角形同士の当たり判定について

Posted: 2012年9月09日(日) 09:11
by AXL
GRAMさん
OBBというものでしょうか、とても分かりやすそうな判定方法なのですが、
http://marupeke296.com/COL_3D_No13_OBBvsOBB.html

http://marupeke296.com/images/COL_3D_No ... mage11.GIF
のようなベクトルはDxlib::VGet()で取得できるベクトルなのでしょうか?
(この場合はZ軸が0になりそうです)

VGet()
http://homepage2.nifty.com/natupaji/DxL ... html#R11N1