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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0905
名無し円周と円周の当たり判定5解決


名無し

リンク

2010/9/5(Sun) 17:35:17|NO.34862

円周(周の線のみ)と円周の当たり判定の仕方がわかりません。

円の周同士が衝突してるときに限って衝突判定してほしいのです。
たとえば、完全に円が円に含まれているときなどは除外してほしいのです。

なにかいい方法はないでしょうか。よろしくお願いします。



この記事に返信する


u

リンク

2010/9/5(Sun) 17:41:21|NO.34863

円と円の当たり判定を用いて判定の「半径未満」を「半径」にします。



R

リンク

2010/9/5(Sun) 17:53:45|NO.34864

「交差判定 円周」でググってこういうのを見つけました。
ttp://www.atelier-blue.com/contest/pc-concours/2003-h/2003h01-27.htm
ソースはC言語ですが、極単純なので分かるのではないかと・・・



名無し

リンク

2010/9/5(Sun) 18:15:46|NO.34865

>>uさん
ということは、
円A, Bがあるとして、
(Ax - Bx)^2 + (Ay - By)^2 == (Ar - Br)^2
ということでしょうか?

実際にスクリプトをくんでみましたが、うまくいっているようにはとうてい見えません。


#const CIRCLE_A_R 30 ;円Aの半径 #const CIRCLE_B_R 100 ;円Bの半径 #define CIRCLE_B_X (ginfo_winx /2) #define CIRCLE_B_Y (ginfo_winy /2) *main await 8 redraw 0 color 255, 255, 255 :boxf pos 0, 0 color //powやpowfを使うと、負の場合非数が帰ってくるため、 a = (mousex -CIRCLE_B_X) *(mousex -CIRCLE_B_X) b = (mousey -CIRCLE_B_Y) *(mousey -CIRCLE_B_Y) c = (CIRCLE_A_R -CIRCLE_B_R) *(CIRCLE_A_R -CIRCLE_B_R) if (a + b == c) { mes "半径と等しい: 衝突" } if (a + b <= c) { mes "半径未満: 衝突" } circle mousex -CIRCLE_A_R, mousey -CIRCLE_A_R, mousex +CIRCLE_A_R, mousey +CIRCLE_A_R, 0 ;円A circle CIRCLE_B_X -CIRCLE_B_R, CIRCLE_B_Y -CIRCLE_B_R, CIRCLE_B_X +CIRCLE_B_R, CIRCLE_B_Y +CIRCLE_B_R, 0 ;円B redraw 1 goto *main



名無し

リンク

2010/9/5(Sun) 18:32:45|NO.34866

>>Rさん
ふむふむ。

(Ax - Bx)^2 + (Ay - By)^2 > (Ar - Br)^2
(Ax - Bx)^2 + (Ay - By)^2 < (Ar + Br)^2
の両方を満たす時、ですね。

サイトに書いてある式を使ったところ、
うまくできました。

ありがとうございます。



f(ビール中)

リンク

2010/9/5(Sun) 21:20:34|NO.34870

・・・。

中心点同士からの距離だして

当たり判定の必用な距離だけ処理すりゃ良いだけじゃないのか。



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