前提・実現したいこと
オイラー法を用いて初期条件x=0、y=0、初速度v=10.0、投射角度r=45°、反発係数e=0.7、刻み幅h=0.01、ステップ数n=500の投射物体のx, y座標を求めたいのですが、初期条件でないy=0において物体が再びy>0の方向へ跳ね返り、かつy方向速度がe倍するようなプログラムの組み方がわかりません。
該当のソースコード
C
1#include <stdio.h> 2#include <math.h> 3 4int main(){ 5 int i, n = 500; 6 double x_num[n+1], y_num[n+1], vx_num[n+1], vy_num[n+1], f1, f2, f3, f4, h = 0.01, g = 9.8, r = 0.7854, e = 0.7; 7 FILE *fp; 8 9 x_num[0] = 0.0; 10 y_num[0] = 0.0; 11 vx_num[0] = 10.0 * cos(r); 12 vy_num[0] = 10.0 * sin(r); 13 14 fp = fopen("rep2.txt", "w"); 15 16 for(i = 0; i < n; ++i){ 17 f1 = 0; 18 vx_num[i+1] = vx_num[i] + f1 * h; 19 f2 = vx_num[i]; 20 x_num[i+1] = x_num[i] + f2 * h; 21 f3 = -g; 22 vy_num[i+1] = e * (vy_num[i] + f3 * h); 23 f4 = vy_num[i]; 24 y_num[i+1] = y_num[i] + f4 * h; 25 26 fprintf(fp, "%lf\t%lf\n", x_num[i], y_num[i]); 27 } 28 fclose(fp); 29 return 0; 30} 31
試したこと
f3 = -g; vy_num[i+1] = e * (vy_num[i] + f3 * h); f4 = vy_num[i]; y_num[i+1] = y_num[i] + f4 * h;
の部分を
if{ f3 = -g; vy_num[i+1] = e * (vy_num[i] + f3 * h); f4 = vy_num[i]; y_num[i+1] = y_num[i] + f4 * h; }
としてみたのですがうまくいきませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。