ページ 11

楕円形の衝突判定

Posted: 2010年8月20日(金) 22:32
by situmon
東方では楕円形の玉はしっかりと楕円形の当たり判定ができています。
またレーザーもたぶん楕円形の当たり判定を使っているレーザーがあると思うのですが、
どうすれば楕円形と円の衝突判定ができますか。
ちなみに「ゲームつくろー!」というページのは難しくまた楕円と円ではありませんでした。
どなたか、わかりやすく説明していただけないでしょうか(理解力が乏しいのでよろしくお願いします。)

Re:楕円形の衝突判定

Posted: 2010年8月21日(土) 00:21
by ぬるぽ
一番簡単な方法は
円と円の当たり判定が作れるならば
複数の玉を連続で出し、それらを加算ブレンドすると
楕円の玉になるのでそれを利用する方法はいかがでしょうか。
レーザーも同様です。参考までにどうぞ。

Re:楕円形の衝突判定

Posted: 2010年8月21日(土) 00:48
by h2so5
正確に判定を行うには、やはり「ゲームつくろー!」のような方法を
使わなくてはいけないと思います。

「ゲームつくろー!」の判定は楕円と楕円ですので、
片方の楕円のX軸径とY軸径を同じ大きさにすれば円と楕円の判定をしているのと同じです。


ただし、多少誤差が生じてもよいのならもう少し簡単な方法もあります。
楕円の二つの焦点から楕円上の任意の点に引いた線分の和が一定値(長軸の長さ*2)であることを利用してします。


判定したい楕円をA
判定したい円をB
として、

判定したい楕円の長軸、短軸をAの半径だけ伸ばした楕円A’を用意します。
A’の二つの焦点からBの中心に引いた線分の長さの和をnとして、

n が A’の長軸の長さ*2 以下であれば衝突しています。


ただしこの方法では誤差が出ます。具体的にいうと添付画像に示してあるくらいの差になります。
黒い楕円との衝突判定をしても実際は赤い楕円との衝突判定の結果が出ます。

しかしシューティングなどの当たり判定では特に問題のない誤差ではないでしょうか。

Re:楕円形の衝突判定

Posted: 2010年8月21日(土) 11:20
by situmon
>ぬるぽさん
その方法だと東方星蓮船のEx中ボスのスペルカード傘符「大粒の涙雨」にでてくるような弾だと判定が難しくなってしまうと思うので・・・(わかりにくいたとえですいません。)
また厳密には楕円ではないと思うのですが・・・せっかく答えていただいたのに、もし気に障りましたらすいません。
しかしレーザーには使えそうですね。アドバイスどうもありがとうございます。
>h2so5さん
あとでゆっくり読み返してみますが、やはりあのページの内容をしっかり理解しないと、だめなのですね。
それと誤差はなるべくなくしたいとおもうので、参考程度に考えます。ありがとうございます。
もしお時間が空いてればですが、ゲームつくろー!!の説明をわかりやすく説明していただけないでしょうか。(たぶん行列などをしっかり理解していたら簡単なのでしょうが、中学生なので、どうしても難しい式など出てきて、わからないので、行列変換(?)というので何をしているかを教えていただけないでしょうか?)
それとシューティングですが、長い楕円形(レーザーのような)の弾を作りたいので、今回楕円形について聞きました。

お二方ともどうもありがとうございます。

Re:楕円形の衝突判定

Posted: 2010年8月21日(土) 20:25
by h2so5
>situmonさん

実は私自身も「ゲームつくろー!!」の内容はあまり理解できていません。
なんとなくやっていることは分かりますが、計算式がややこしくてよく分からなかったりします。

中学生だと少し難しいかも知れませんが、とりあえず分かる範囲で解説をしてみます。

基本的に、「ゲームつくろー!!」の方法でやっている主なことは次の二つです。
(添付の画像を参考にしてください)




1.円と楕円の衝突判定は、楕円と点の衝突判定に置き換えることができます。

図のように、元の楕円を円の半径だけ広げた楕円と、円の中心との衝突判定は、
楕円と円の衝突判定をしているのと同じことになります。

図にも書いてありますが、楕円を広げるというのはただ拡大するわけではありません。
つまり、元の楕円と相似ではないということです。
楕円の縦横を半径分だけ伸ばしてただ拡大した場合は、前のレスで言った誤差がでます。

この広げるための計算が「ゲームつくろー!!」の後半に書かれています。
「楕円の長径と短径を+1して新しい楕円にする」と表現されています。




2.楕円と点の衝突判定は、円と点の衝突判定に置き換えることができます。

図のように、変換行列を利用して楕円と点を丸ごと縮めてしまえば、
円と点の衝突判定になります。

なぜなら、楕円と点の距離は変わってしまいますが衝突しているかしていないかは変わらないからです。

楕円が傾いていた場合は、楕円と点をまとめて回転させて楕円をまっすぐにします。
この場合も、位置は変わってしまいますが、衝突しているかしていないかは変わらないため
衝突判定する上で何も問題はありません。

こっちは「ゲームつくろー!!」の前半くらいに書かれています。

(画像間違えたので修正) 画像

Re:楕円形の衝突判定

Posted: 2010年8月22日(日) 01:10
by
東方の当たり判定は、円対円の当たり判定しか使ってません。
なぜなら、円対円以外の当たり判定は複雑で重いからです。
楕円型の弾も見た目が楕円なだけで、
当たり判定は小弾と同じくらいの丸い当たり判定しか持ってなかったりします。
レーザーに至っては、隙間なく丸い当たり判定を敷き詰めているだけだったりします。

Re:楕円形の衝突判定

Posted: 2010年8月24日(火) 20:33
by situmon
少しの間ネットが使えなかったので、返事が遅くなってしまいすいません。
>h2so5さん
詳しい説明ありがとうございます。
またゆっくり理解したいと思います。
どうもありがとうございました。
>yさん
複雑なんですか・・・
レーザーや楕円形は丸を敷き詰めて正確にしているのですか・・・
h2so5さんの説明もよく読んで、検討してみます。

ぬるぽさん、h2so5さん、yさん、
ご親切に回答していただき大変参考になりました。
まだしっかり読めていないのでこれから読みますが、
本当にどうもありがとうございました。
これからもよろしくおねがいします。