円と円の当たり判定 PART2

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

円と円の当たり判定 PART2

#1

投稿記事 by MATH.H_SUPER » 15年前

2つの円の当たり判定をしようと思います。
cx1とcx2は2つの円の中心のx座標
cy1とcy2は2つの円の中心のy座標
cz1とcz2は2つの円の半径

pow(cx1-cx2,2.0)+pow(cy1-cy2,2.0)>=pow(cz1+cz2,2.0)

のときに当たりというような感じで正しく判定されるでしょうか?

みけCAT

Re:円と円の当たり判定 PART2

#2

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

この条件の時は当たっていない気がしました。

シエル

Re:円と円の当たり判定 PART2

#3

投稿記事 by シエル » 15年前

不等号が逆です。

toyo

Re:円と円の当たり判定 PART2

#4

投稿記事 by toyo » 15年前

質問とは関係ないですが2乗の計算であればpow関数を使うより普通の乗算でやったほうが速いと思いますよ

double a = cx1-cx2;
double b = cy1-cy2;
double c = cz1+cz2;
if (a*a + b*b >= c*c)
{
//当たっていない
}
else
{
//当たり
}

MATH.H_SUPER

Re:円と円の当たり判定 PART2

#5

投稿記事 by MATH.H_SUPER » 15年前

メインループの球の描画のところに
CircleHitCircle(jiki.tx+12,jiki.ty+12,10,tmain2.x,tmain2.y,3,jiki.hp);
を入れても反応しないのはなぜでしょうか?

うしお

Re:円と円の当たり判定 PART2

#6

投稿記事 by うしお » 15年前

CircleHitCircleという関数は
MATH.H_SUPERさんにしか分からない関数なので、
これだけでは原因を突き止めることはできません

・ステップ実行や、適当な定数を入れて動作テストをして、
 CircleHitCircleが適切な動きをしているか確かめる
・CircleHitCircleが正常ならば、渡すパラメータがずれていないか確かめる

というのがシンプルなバグを見つけるためのステップではないでしょうか

デバッグの基本は問題分割です
分割をして、怪しいところを一つ一つつぶしていけば、必ず原因にたどりつけるはずです。
上記の判定の考え方は正しいので、それ以外の部分をあたってみてください

toyo

Re:円と円の当たり判定 PART2

#7

投稿記事 by toyo » 15年前

前の質問を見ると
jiki.hp = CircleHitCircle(jiki.tx+12,jiki.ty+12,10,tmain2.x,tmain2.y,3);
のようにやりたいのかなと思いましたが

MATH.H_SUPER

Re:円と円の当たり判定 PART2

#8

投稿記事 by MATH.H_SUPER » 15年前

試しに、void TEST(int testx){
testx++;
}
という関数を作り、ループの場所に置いてみて、引数にttestxという変数を入れてみたのですが、0からカウントアップするはずがアップしていきません。
なぜでしょうか?

うしお

Re:円と円の当たり判定 PART2

#9

投稿記事 by うしお » 15年前

これはTESTの引数が値渡しだからです
関数のなかのtestxはただのコピーです
呼び出し元のを変更したい場合はポインタ渡しや参照渡しを使う必要があります
void TEST(int* p){
(*p)++;
}

MATH.H_SUPER

Re:円と円の当たり判定 PART2

#10

投稿記事 by MATH.H_SUPER » 15年前

すみません、知りませんでした。

苦しんで覚えるCで勉強してきます!!!

softya

Re:円と円の当たり判定 PART2

#11

投稿記事 by softya » 15年前

関数の引数の値渡しと参照渡しの理解が出来ていないです。
C言語なら
int TEST(int testx){
return ++testx;
}

void TEST(int *testx){
(*testx)++;
}
とするかC++なら
void TEST(int &testx){
testx++;
}
としないと呼び出し元に更新された値は戻りません。

みけCAT

Re:円と円の当たり判定 PART2

#12

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

関数の引数はコピーなので、書き換えても元の変数は変わりません。
int test(void) {
    static int a=0;
    a++;
    return a;
}
とするか、
void test(int* a) {
    *a++;
}

/*呼び出すときは
test(&a);
のように変数に&を付ける
*/
のようにします。 画像

MATH.H_SUPER

Re:円と円の当たり判定 PART2

#13

投稿記事 by MATH.H_SUPER » 15年前

ポインタの勉強からがんばります!!!

親切にありがとうございましたm(_ _)m

また質問があったらよろしくお願いします!

KEYONN_

Re:円と円の当たり判定 PART2

#14

投稿記事 by KEYONN_ » 15年前

薦める本があります。ゲームプログラミングのための数学・物理学です。
この本に円の当たり判定や3Dに必要な数学・物理学が載っています。
オススメです。

閉鎖

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