HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0420
ミント当たり判定を円にするのには?14解決


ミント

リンク

2010/4/20(Tue) 15:26:52|NO.32119

どーもこんにちは。
あれからだいぶSTGゲームっぽくなりました。

ですが、円の当たり判定に少々困っております。
例えば↓

if (emx < hanx+8) and (emx+16 > hanx) and (emy < hany+8) and (emy+16 > hany){
(一部分)

このような当たり判定定義があったとします。
ですがこのままだと、円の場合見た目どおりの当たり判定にはなりません(あたりまえ)
(四角形の当たり判定のまま)


そこで、皆さんにお聞きしたいと思いました。
やりたいことはタイトル通りです「当たり判定を円にするのには?」

それではよろしくお願いします。



この記事に返信する


f(飲茶中)

リンク

2010/4/20(Tue) 15:57:32|NO.32120

中心からの距離測れば良いんでね。



p、USAGI

リンク

2010/4/20(Tue) 16:15:07|NO.32121




ミント

リンク

2010/4/20(Tue) 18:30:58|NO.32122

>>fさん
>>中心からの距離測れば良いんでね。
それは何となくわかる



>>p、USAGIさん
>>参考になれば・・・
>>http://hsp.tv/play/pforum.php?mode=pastwch&num=21061
うはー(ノ´∀`*)


こいつは理解するまで時間がかかりそうだ。
なので、とりあえず解決っていうことにしときます。

ありがとうございました!



GENKI

リンク

2010/4/20(Tue) 20:12:05|NO.32123

> >>fさん
> >>中心からの距離測れば良いんでね。
> それは何となくわかる

なら簡単に図を描いてみてください。紙と鉛筆でokです。丁寧に描きさえすればフリーハンドでok。
2つの円が衝突した図と、衝突していない図です。
これに2つの円の中心間の距離と、2つの円それぞれの半径を書き加えてください
半径と距離の関係が見えてくるはずです。

ここまで分かれば後は何を比較すれば衝突しているとみなせるか、すぐに気づくと思います。

これが分からないまま楕円の衝突なんか見てもさっぱり理解できないはずですよ。


> このような当たり判定定義があったとします。

衝突判定のアルゴリズムに定義なんてありません。
結果を出すためには色々なアプローチの仕方があります。
また、同じ結果が得られるのであればどのような手法を使ってもかまわないわけです。



ミント

リンク

2010/4/20(Tue) 20:38:00|NO.32124

>>GENKIさん
>>これに2つの円の中心間の距離と、2つの円それぞれの半径を書き加えてください
>>半径と距離の関係が見えてくるはずです。
実際に描いてみて何となくつかんだ。
http://www.dotup.org/uploda/www.dotup.org826204.bmp

例えば、現在離れている距離が8だとして
その距離が5以下の時、当たり判定。

真ん中を見る方法は、円の半分(8だったら4)ですね。
これをプログラムに置き換えるだけですね・・・



>>結果を出すためには色々なアプローチの仕方があります。
>>また、同じ結果が得られるのであればどのような手法を使ってもかまわないわけです。
なるほど。
考え方次第ですね。

アドバイスありがとうございました。



GENKI

リンク

2010/4/20(Tue) 21:03:06|NO.32125

むう。いい図がかけていますね。図はokです。でも数値は問題ありそうですね。
これは円の半径はいくつなんでしょう?
4...ですか?

青い線が円の中心と中心を結んだ直線距離ですね。
この青い直線の中に、円の半径と同じ長さの部分が2箇所あります。
そこの部分に半径の数値を書き込んでみてください。衝突してるほうもしてないほうも両方です。

そしたら、それをじっと見て…。
半径を「4」としたら、図に書き込まれた中心間距離の数値と半径の数値の関係、なんだおかしくないですか?



ミント

リンク

2010/4/20(Tue) 22:03:59|NO.32126

>>GENKIさん
>>これは円の半径はいくつなんでしょう?
>>4...ですか?
半径4ですね。元の大きさは8です。


>>この青い直線の中に、円の半径と同じ長さの部分が2箇所あります。
>>そこの部分に半径の数値を書き込んでみてください。衝突してるほうもしてないほうも両方です。
http://www.dotup.org/uploda/www.dotup.org826408.bmp
これでいいはず(`・ω・´)



多分私の考え方ずれているかもしれないけど、

4*4っていうのは、まず半径4のところでコンパス置きます
んで、↑も半径4ですので、くるっと回して(8)
同じ容量で、←(12)、↓に回して(16)です。

ストレートに言うと、半径*半径です。


多分間違ってると思う( ̄▽ ̄;



GENKI

リンク

2010/4/20(Tue) 23:06:21|NO.32130

図ありがとうございます。
なるほど、把握しました。算数超苦手なんですね。これはかなり手ごわい。でも誠意には誠意で答えよう。
図は、最初のと同じで数値だけ書き換えたんですね。
半径の寸法の入れ方、場所ともにばっちりです!

> 4*4っていうのは、まず半径4のところでコンパス置きます
> んで、↑も半径4ですので、くるっと回して(8)
> 同じ容量で、←(12)、↓に回して(16)です。

なぜ掛け算が…というかこれは何を…。
これは…下の図の中心間距離(青い線の長さ)を求めようとしているのでしょうか。
もしそうなら、まず落ち着いて、頭の中を空っぽにして図だけを見てください。
長さ4の直線が2本、一直線に並んでいます。長さはいくつ?

頭の中だけで難しく考えようとしすぎです。
図だけを見て考えてみてください。
http://www.dotup.org/uploda/www.dotup.org826697.png
[1]は置いといて、[2]を見てください。bはいくつになりますか?
青い線は直線(途中で折れ曲がってない)なので[3]のように円を取っ払って考えておkです。


> 多分間違ってると思う( ̄▽ ̄;

それでもどうしても「?」となってしまうなら、コンパスと定規できちんと測って図を描いてみてください。
図を描いたら実際に長さを図ってみて自分の考えと照らし合わせてみてください。



> 元の大きさは8です。

「直径」が8ですね。
「大きさ」と言ってしまうと面積なのか外周長さなのか直径なのか間違えてしまうのできちんと直径と言うようにしたほうがいいですよ。



ミント

リンク

2010/4/21(Wed) 10:09:35|NO.32136

レスありがとうございます。
ちょいと風邪を引いてしまったので、直ったら見ようかと思います。



ミント

リンク

2010/4/22(Thu) 11:39:28|NO.32157

どーも。お待たせいたしました。
風邪の方は完全とは言えませんけど直りました。


>>GENKIさん
>>なるほど、把握しました。算数超苦手なんですね。これはかなり手ごわい。でも誠意には誠意で答えよう。
苦手ですねー。これでも一番好きな教科なんですが( ̄▽ ̄;

>>半径の寸法の入れ方、場所ともにばっちりです!
あっててよかった。

>>もしそうなら、まず落ち着いて、頭の中を空っぽにして図だけを見てください。
いったん頭の中をリセットしました。

>>長さ4の直線が2本、一直線に並んでいます。長さはいくつ?
4*2で8 (`・ω・´)



>>[1]は置いといて、[2]を見てください。bはいくつになりますか?
8ですね。

>>「大きさ」と言ってしまうと面積なのか外周長さなのか直径なのか間違えてしまうのできちんと直径と言うようにしたほうがいいですよ。
実は国語も・・・(ネット辞書で(ぁ

はい!わかりました。
次からは「直径」っと言います。



u

リンク

2010/4/22(Thu) 15:24:11|NO.32158

調べて来た人用一行で説明すると、二つの円の中心と中心の距離が、それぞれの円の半径の和以内だと当たってます。



ミント

リンク

2010/4/22(Thu) 17:58:24|NO.32166

>>uさん
>>調べて来た人用一行で説明すると、
>>二つの円の中心と中心の距離が、それぞれの円の半径の和以内だと当たってます。
2つとも直径8だった場合、半径4で → 4+4で8。

つまり、8以内だと当たりですね。



GENKI

リンク

2010/4/22(Thu) 20:51:43|NO.32171

> >>二つの円の中心と中心の距離が、それぞれの円の半径の和以内だと当たってます。
> 2つとも直径8だった場合、半径4で → 4+4で8。
>
> つまり、8以内だと当たりですね。

正解です!
あとはif分で使えるように、必要な値を求める式を書ければ完璧ですね。

でもその前に、最初に描いてもらった図を見直して何を勘違いしていたか考えてみたほうがいいかもしれません。
(より理解を深めると言う意味で。)



ミント

リンク

2010/4/23(Fri) 12:12:16|NO.32181

>>GENKIさん
>>正解です!
やったー!ヽ(゚∀゚)ノ(←コロンビa

>>あとはif分で使えるように、必要な値を求める式を書ければ完璧ですね。
そうですね。そこが一番難しいですが、がんばってみます。


>>でもその前に、最初に描いてもらった図を見直して何を勘違いしていたか考えてみたほうがいいかもしれません。
(・_・D フムフム



皆様お答えいただきありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.