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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
AXL

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

#1

投稿記事 by AXL » 11年前

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

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

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

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 11年前

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

AXL

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

#3

投稿記事 by AXL » 11年前

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

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

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

#4

投稿記事 by GRAM » 11年前

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

AXL

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

#5

投稿記事 by AXL » 11年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る