円と回転四角形(長方形)の当たり判定

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

円と回転四角形(長方形)の当たり判定

#1

投稿記事 by newnew » 5年前

はじめまして、

円と回転四角形(長方形)の当たり判定が上手くいかず行き詰まってしまいました。

長方形の対角線の交点を中心として回転させるものの当たり判定の方法を書いてあるページはいくらか見つけられたのですが、(こちらの管理人さんのサイトも拝見しました)
私が知りたいのは長方形内部の任意の点を中心として回転させた場合の円との当たり判定、といったことです。

どうすれば上手くいくのか全く分かりません。知識不足で申し訳ないです。

よろしくお願い致します。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 円と回転四角形(長方形)の当たり判定

#2

投稿記事 by みけCAT » 5年前

回転させた後の長方形の四隅の点の座標を求めて、多角形と円の当たり判定をすることでできると思います。

ある点Aを別の点(x, y)を中心に回転させた点は
1. 点Aを(-x, -y)平行移動する。これを点A'とする。
2. 1で求めた点A'を、原点を中心に回転させる。これを点A''とする。
3. 2で求めた点A''を(x, y)平行移動する。
ことで求めることができます。

多角形と円の当たり判定は、例えばこのサイト
2D衝突編その5 円と線分から多角形と円へ
に載っているように、
・円が多角形を構成するいずれかの辺(線分)に当たっている
・多角形の辺が時計回りのベクトルで表されているとき、円の中心が全ての辺ベクトルの右側にある
のいずれかが成り立てば円が多角形に当たっている、といえます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

newnew

Re: 円と回転四角形(長方形)の当たり判定

#3

投稿記事 by newnew » 5年前

返信ありがとうございます。

なるほど、やはり4隅の座標は求めなければならない感じですか。

多角形の辺が時計回りのベクトルで表されているとき、円の中心が全ての辺ベクトルの右側にある
というのがいまいちピンときませんが線分のほうは何とかなると思います。

明日にでも取り組んでみます。

アバター
usao
記事: 1887
登録日時: 11年前

Re: 円と回転四角形(長方形)の当たり判定

#4

投稿記事 by usao » 5年前

回転してなければ判定できるのでしょうか?
→できない場合は,まずそこからやるべきなので,ここではできるのだと想定します.

回転してなければ判定できるのだとして,
その処理が何かしらの関数として実装されているとしましょう.
例えば,

コード:

//長方形と円の当たり判定.当たっているならtrueを返す
bool IsCollide( 長方形, 円 )
{ ... }
みたいな.

回転後の座標系で,↑の関数の引数として必要なデータを表現すれば,この関数を使って判定できますよね.
オフトピック
> やはり4隅の座標は求めなければならない感じですか。
「4隅の座標」が必要かどうかは,衝突判定処理がそれを必要とするかどうか,に依存しますよね.
長方形の「幅」や「高さ」は回転によって変化しませんから,
長方形を表すのにそういう側の表現を用いている場合には,
直接的に(表面的に,というべきか?)「4隅の座標」を扱う形にはならないかもしれません
(まぁ,表現が異なるだけで,情報の意味としては同じなんでしょうけども)

アバター
usao
記事: 1887
登録日時: 11年前

Re: 円と回転四角形(長方形)の当たり判定

#5

投稿記事 by usao » 5年前

何かこの話題,以前にもあったような気がしますね.
viewtopic.php?f=83&t=16423

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 円と回転四角形(長方形)の当たり判定

#6

投稿記事 by みけCAT » 5年前

「回転長方形」の表現方法がわかりませんが、仮に
・辺がx軸またはy軸と平行な長方形
・回転の中心座標と回転角度
で表現されているとします。
このときは、
1. 円の中心座標を、長方形の回転の中心座標を中心に、長方形の回転角度×(-1)回転する
2. 回転後の円と、「辺がx軸またはy軸と平行な長方形」の当たり判定を行う
で当たり判定ができると思います。
円と辺がx軸またはy軸と平行な長方形の当たり判定は、
円と長方形の当たり判定 | ftvlog
によると、
・長方形を縦(上下)または横(左右)に円の半径分伸ばした領域に円の中心が入っているか
・円の中心と長方形の四隅の距離が円の半径以下か
でできるようです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1887
登録日時: 11年前

Re: 円と回転四角形(長方形)の当たり判定

#7

投稿記事 by usao » 5年前

わかりやすく絵で説明すると,
下図の,破線より左側の世界と右側の世界とで
「衝突判定」の処理でやることは全く一緒だよね,っていうだけの話.

x-yの世界で処理できるなら,u-vの世界で全く同じことをすればOK.
Fig.png
Fig.png (9.2 KiB) 閲覧数: 4198 回

返信

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