- 締切済み
C言語(条件処理)
二つの球の接触を判断するプログラムを作るという宿題が出されてたのですが、if文による条件処理をどのように書けば良いか分かりません。お助けください。 接触パターンはいくつかあると思いますが、その接触するときの条件について以下のソースコードより後、どんなソースコードを追加すれば良いか教えてもらえませんか? 接触する条件を記述するだけでも良いので回答のほうを至急、お願いします。 何か間違っていれば修正のほうもお願いします。 ソースコード #include<stdio.h> int main(void) { float x1,y1,z1; //x1,y1,z1は球1の中心の位置座標 float x2,y2,z2; //x2,y2,z2は球2の中心の位置座標 //例えば(3,0,0)であれば球の中心がx軸に3の位置にいることを指す。 float r1; //球1の半径 float r2; //球2の半径 printf("x1="); scanf("%f",&x1); printf("y1="); scanf("%f",&y1); printf("z1="); scanf("%f",&z1); printf("r1="); scanf("%f",&r1); printf("x2="); scanf("%f",&x2); printf("y2="); scanf("%f",&y2); printf("z2="); scanf("%f",&z2); printf("r2="); scanf("%f",&r2); この部分の追加をお願いします。 if(){ printf("接触した"); } else{ printf("接触していない"); } return 0; } もしくは r1とr2を入力ではなく、初期化したほうが良いのでしょうか?・・・ そうであれば、修正のほうもお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8754/19864)
衝突判定のしかた ・2つの球の中心を、点1、点2として、2点間の距離を求める。 ・2つの弾の半径の和を求める。 ・以下の判定を行う。 「2点間の距離>半径の和」の場合、接触していない。 「2点間の距離=半径の和」の場合、接触している。 「2点間の距離<半径の和」の場合、接触していて、2つの球がめり込んでいる。 従ってif文の中身は、 if(2つの球の中心を、点1、点2として、2点間の距離を求める式 <= 2つの弾の半径の和を求める式){ となる。 「2つの球の中心を、点1、点2として、2点間の距離を求める式」は、google検索すれば一瞬で見付かる。 「2つの弾の半径の和を求める式」は、猿でも判る(判らない場合は幼稚園からやり直すこと)
- starbow
- ベストアンサー率28% (2/7)
コーディングがどうなるかはよく解りませんが、 考え方としては、2つの球の中心座標の距離がそれぞれの半径の和より大きいかどうかを計算すれば良いと思います。 √(x1-x2)^2+(y1-y2)^2+(z1-z2)^2 > (r1+r2) ・・・接触していない