- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語の課題について)
C言語の課題について
このQ&Aのポイント
- C言語の課題について困っています。衝突時の時間と座標の作成方法が分からず、プログラムを作成していますが、一秒後の点Pの位置が正しいか分かりません。
- C言語の課題で、衝突時の時間と座標の作成方法について困っています。プログラムを作成しましたが、一秒後の点Pの位置の算出が正しいかどうか不安です。
- C言語の課題に取り組んでいますが、衝突時の時間と座標の作成方法がわからず困っています。プログラムを作成して一秒後の点Pの位置を算出しましたが、正しいか不安です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ちゃんとやる気はあるようですね。 これでも見て理解してみてね。 #include<stdio.h> #include<math.h> int main(void) { double x=1.0,y=1.0;//初期位置 double vx=1.0,vy=-2.0;//初期速度 double ax=1.0/3.0,ay=-1.0;//壁は(1/3)x-y=0 double nx,ny,px,py,dot,ss,tc,t1=1.0; //t秒後の位置(x+vx*t,y+vy*t)だからax*(x+vx*t)+ay*(y+vy*t)=0のとき衝突する //つまりt=-(ax*x+ay*y)/(ax*vx+ay*vy)のとき tc=-(ax*x+ay*y)/(ax*vx+ay*vy); if (tc<1.0) {//衝突は1秒以内 x+=vx*tc;//衝突位置 y+=vy*tc; ss=sqrt(ax*ax+ay*ay); nx=ax/ss;//壁の正規化した法線 ny=ay/ss; dot=(vx*nx+vy*ny);//内積 px=-dot*nx;//投影ベクトル py=-dot*ny; vx+=2.0*px;//衝突後速度 vy+=2.0*py; x+=vx*(t1-tc);//t1秒後位置 y+=vy*(t1-tc); } else {//衝突は1秒よりあと x+=vx*t1;//t1秒後位置 y+=vy*t1; } printf("1秒後の位置は点P(x,y)=(%f,%f)\n",x,y); return 0; }
お礼
すごく丁寧な回答ありがとうございます。 おかげさまでかなり理解を深めることができました。 また、何度も質問してしまって、申し訳ありませんでした。