% ball - Programm fuer fliegende Baelle
% Euler Methode, ohne Reibung
clear;  help ball;
%
r = [0 0]; % ev. auch eingeben
v0    = input(' Anfangsgeschwindigkeit v0 (m/sek) ? ');
theta = input(' Winkel theta(Grad) ? ')*pi/180; % gleich ins Bogenmass
tau   = input(' Zeitschritt tau(sek) ? ');
%
v = v0*[cos(theta) sin(theta)]; %v_0
g = 9.81; % g in m/sek^2
a = [0 -g]; % in diesem Fall konstante Beschleunigung
%
maxstep = 1000; % Maximale Schrittzahl
%
% Hauptschleife:
%
for istep=1:maxstep
     xplot(istep) = r(1);   % Werte behalten zum Plotten am Ende
     yplot(istep) = r(2);
     r = r + tau*v;                 % Euler Schritt
     v = v + tau*a;                 % Euler Schritt
%
  if( r(2) < 0 )  % loop abbrechen, Aufschlag
    break;
  end
end
%
xplot(istep+1) = r(1);  yplot(istep+1) = r(2); % letzter Punkt
fprintf(' Reichweite %g meter\n',r(1))
fprintf(' Flugzeit %g sekunden\n',istep*tau)
%
%  Plot:
%
% Bodenlinie:
xground = [0 xplot(istep+1)]; yground = [0 0];
% Graph der Trajektorie:
plot(xplot,yplot,'+',xground,yground,'-');
xlabel('Weite (m)')
ylabel('Hoehe (m)')
title('Fliegender Ball')
%
% Vgl. exakte Loesung:
%
xmaxx = v0^2*sin(2*theta)/g;
tfl   = 2*v0*sin(theta)/g;
fprintf(' rel. Abweichung  Flugzeit: %g \n',(istep*tau-tfl)/tfl)
fprintf(' rel. Abweichung  Weite   : %g \n',(r(1)-xmaxx)/xmaxx)
