function ball3(v0,ang,k,e) % ボール投げの軌跡(空気抵抗、バウンドあり) % v0: 初速度 % ang: 投げ上げの角度(度) % k: 空気抵抗 % e: 跳ね返り係数 (0 < e < 1) g = 9.8; % 重力加速度 dt = 0.01; % 時間の刻み幅 m = 5; % バウンドの回数 s = ang*pi/180; % ラジアンに変換 % 速度の分解 vx0 = v0*cos(s); vy0 = v0*sin(s); % 位置の初期値 x = 0; y = 0; % 初期値を図に描く.タイトルやラベルも付ける plot(x,y,'o') title('Throwing ball') xlabel('x'), ylabel('y') hold on % 軌跡を残す % 速度の初期値 v = v0; vx = vx0; vy = vy0; for loop=1:m while y >= 0 % 空中にいる間は継続 x = x + vx*dt; % x方向の位置変化 y = y + vy*dt; % y方向の位置変化 vx = vx - k*v*vx*dt; % x方向の速度変化 vy = vy - g*dt - k*v*vy*dt; % y方向の速度変化 v = sqrt(vx^2 + vy^2); % 速度の修正 plot(x,y,'o') pause(dt); % 表示のためにdt秒止める end % バウンド処理 vx = e*vx; vy = -e*vy; v = sqrt(vx^2 + vy^2); % 速度の修正 y = 0; end %hold off