はじめまして、
円と回転四角形(長方形)の当たり判定が上手くいかず行き詰まってしまいました。
長方形の対角線の交点を中心として回転させるものの当たり判定の方法を書いてあるページはいくらか見つけられたのですが、(こちらの管理人さんのサイトも拝見しました)
私が知りたいのは長方形内部の任意の点を中心として回転させた場合の円との当たり判定、といったことです。
どうすれば上手くいくのか全く分かりません。知識不足で申し訳ないです。
よろしくお願い致します。
円と回転四角形(長方形)の当たり判定
Re: 円と回転四角形(長方形)の当たり判定
回転させた後の長方形の四隅の点の座標を求めて、多角形と円の当たり判定をすることでできると思います。
ある点Aを別の点(x, y)を中心に回転させた点は
1. 点Aを(-x, -y)平行移動する。これを点A'とする。
2. 1で求めた点A'を、原点を中心に回転させる。これを点A''とする。
3. 2で求めた点A''を(x, y)平行移動する。
ことで求めることができます。
多角形と円の当たり判定は、例えばこのサイト
2D衝突編その5 円と線分から多角形と円へ
に載っているように、
・円が多角形を構成するいずれかの辺(線分)に当たっている
・多角形の辺が時計回りのベクトルで表されているとき、円の中心が全ての辺ベクトルの右側にある
のいずれかが成り立てば円が多角形に当たっている、といえます。
ある点Aを別の点(x, y)を中心に回転させた点は
1. 点Aを(-x, -y)平行移動する。これを点A'とする。
2. 1で求めた点A'を、原点を中心に回転させる。これを点A''とする。
3. 2で求めた点A''を(x, y)平行移動する。
ことで求めることができます。
多角形と円の当たり判定は、例えばこのサイト
2D衝突編その5 円と線分から多角形と円へ
に載っているように、
・円が多角形を構成するいずれかの辺(線分)に当たっている
・多角形の辺が時計回りのベクトルで表されているとき、円の中心が全ての辺ベクトルの右側にある
のいずれかが成り立てば円が多角形に当たっている、といえます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 円と回転四角形(長方形)の当たり判定
返信ありがとうございます。
なるほど、やはり4隅の座標は求めなければならない感じですか。
多角形の辺が時計回りのベクトルで表されているとき、円の中心が全ての辺ベクトルの右側にある
というのがいまいちピンときませんが線分のほうは何とかなると思います。
明日にでも取り組んでみます。
なるほど、やはり4隅の座標は求めなければならない感じですか。
多角形の辺が時計回りのベクトルで表されているとき、円の中心が全ての辺ベクトルの右側にある
というのがいまいちピンときませんが線分のほうは何とかなると思います。
明日にでも取り組んでみます。
Re: 円と回転四角形(長方形)の当たり判定
回転してなければ判定できるのでしょうか?
→できない場合は,まずそこからやるべきなので,ここではできるのだと想定します.
回転してなければ判定できるのだとして,
その処理が何かしらの関数として実装されているとしましょう.
例えば, みたいな.
回転後の座標系で,↑の関数の引数として必要なデータを表現すれば,この関数を使って判定できますよね.
→できない場合は,まずそこからやるべきなので,ここではできるのだと想定します.
回転してなければ判定できるのだとして,
その処理が何かしらの関数として実装されているとしましょう.
例えば, みたいな.
回転後の座標系で,↑の関数の引数として必要なデータを表現すれば,この関数を使って判定できますよね.
オフトピック
> やはり4隅の座標は求めなければならない感じですか。
「4隅の座標」が必要かどうかは,衝突判定処理がそれを必要とするかどうか,に依存しますよね.
長方形の「幅」や「高さ」は回転によって変化しませんから,
長方形を表すのにそういう側の表現を用いている場合には,
直接的に(表面的に,というべきか?)「4隅の座標」を扱う形にはならないかもしれません
(まぁ,表現が異なるだけで,情報の意味としては同じなんでしょうけども)
「4隅の座標」が必要かどうかは,衝突判定処理がそれを必要とするかどうか,に依存しますよね.
長方形の「幅」や「高さ」は回転によって変化しませんから,
長方形を表すのにそういう側の表現を用いている場合には,
直接的に(表面的に,というべきか?)「4隅の座標」を扱う形にはならないかもしれません
(まぁ,表現が異なるだけで,情報の意味としては同じなんでしょうけども)
Re: 円と回転四角形(長方形)の当たり判定
何かこの話題,以前にもあったような気がしますね.
viewtopic.php?f=83&t=16423
viewtopic.php?f=83&t=16423
Re: 円と回転四角形(長方形)の当たり判定
「回転長方形」の表現方法がわかりませんが、仮に
・辺がx軸またはy軸と平行な長方形
・回転の中心座標と回転角度
で表現されているとします。
このときは、
1. 円の中心座標を、長方形の回転の中心座標を中心に、長方形の回転角度×(-1)回転する
2. 回転後の円と、「辺がx軸またはy軸と平行な長方形」の当たり判定を行う
で当たり判定ができると思います。
円と辺がx軸またはy軸と平行な長方形の当たり判定は、
円と長方形の当たり判定 | ftvlog
によると、
・長方形を縦(上下)または横(左右)に円の半径分伸ばした領域に円の中心が入っているか
・円の中心と長方形の四隅の距離が円の半径以下か
でできるようです。
・辺がx軸またはy軸と平行な長方形
・回転の中心座標と回転角度
で表現されているとします。
このときは、
1. 円の中心座標を、長方形の回転の中心座標を中心に、長方形の回転角度×(-1)回転する
2. 回転後の円と、「辺がx軸またはy軸と平行な長方形」の当たり判定を行う
で当たり判定ができると思います。
円と辺がx軸またはy軸と平行な長方形の当たり判定は、
円と長方形の当たり判定 | ftvlog
によると、
・長方形を縦(上下)または横(左右)に円の半径分伸ばした領域に円の中心が入っているか
・円の中心と長方形の四隅の距離が円の半径以下か
でできるようです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 円と回転四角形(長方形)の当たり判定
わかりやすく絵で説明すると,
下図の,破線より左側の世界と右側の世界とで
「衝突判定」の処理でやることは全く一緒だよね,っていうだけの話.
x-yの世界で処理できるなら,u-vの世界で全く同じことをすればOK.
下図の,破線より左側の世界と右側の世界とで
「衝突判定」の処理でやることは全く一緒だよね,っていうだけの話.
x-yの世界で処理できるなら,u-vの世界で全く同じことをすればOK.