%
% function movie_Ball( vx0, vy0, tm, k, v )
%    Waagrechter Wurf mit Reibung
%       vx0 : x-Anfangsgeschwindigkeit
%       vy0 : y-Anfangsgeschwindigkeit
%       tm  : Länge des Zeitintervalls in Sekunden
%       k   : Federkonstante beim Rückfedern
%       v   : Verlustterm beim Rückfedern
%
%       Beispiel-Aufrufe: 
%          movie_Ball( 10,   0, 15, 1000, 0.5 )   Waagrechter Wurf
%          movie_Ball( 10, -10, 15, 1000, 0.5 )   Wurf schief nach unten
%
%    zugehörige DGL-Funktion: Ball_Fun.m
%
%    movie für Animation über Frames 
% 
function  movie_Ball( vx0, vy0, tm, k, v )
 
   x0 = 0;    % x0 : x-Anfangsort 
   y0 = 10;   % y0 : y-Anfangsort
   w0 = [ x0, vx0, y0, vy0 ];   % Anfangswerte
   tspan = [0,tm];              % Zeit-Intervall
   
   % Lösung des Anfangswert-Problems, 
   %   Rückgabe der Daten über einen sol-Struct, siehe MATLAB-Hilfe
   sol = ode45( @Ball_Fun, tspan, w0, [], k, v  );
   
   % Auswertung des sol-Structs für 70 Werte (Frames):
   nframes = 70;    % Zahl der Frames = Einzelbilder
   t  = linspace(0,tm,nframes);  % zu den Frames gehörende Zeiten 
   x  = deval(sol,t,1);   % x-Positionen zu den Zeitwerten t
   vx = deval(sol,t,2);   % x-Geschw zu den Zeitwerten t
   y  = deval(sol,t,3);   % y-Positionen zu den Zeitwerten t
   vy = deval(sol,t,4);   % y-Geschw. zu den Zeitwerten t
  
   % Plots in 4 subplots: 
   subplot( 2,2,1 )
   plot( t, x ) 
   axis( [-1,tm, -1,150] )
   xlabel( 't' )
   ylabel( 'x' )
   axis square

   subplot( 2,2,2 )
   plot( t, y ) 
   axis( [-1,tm, -1,15] )
   xlabel( 't' )
   ylabel( 'y' )
   axis square
  
   subplot( 2,2,3 )
   plot( x, y ) 
   axis( [-1,150, -1,15] )
   xlabel( 'x' )
   ylabel( 'y' )
   axis square 
      
   % Bearbeiten des 4. subplots, rechts unten, mit movie: 
   %   Startplot mit rotem Punkt erstellen und handle h merken
   subplot( 2,2,4 )
   h = plot( x0, y0, '.r' );
   set( h, 'MarkerSize', 20 );  % Punktgröße auf 20 setzen
   axis( [min(x)-5 max(x)+5 min(y) max(y)+5] )
   axis square
   grid off 
   
   % alle 70 Einzel-Frames für die Movie-Daten M erzeugen  
   for( k = 1:nframes )            
      % Plot rechts unten mit neuen Daten erstellen
      set( h, 'XData', x(k), 'YData', y(k) )
      % mit Plot ein Frame für das Movie schießen
      M(k) = getframe( gcf );
   end
  
   % Movie 5x abspielen, default 12 Frames pro Sekunde 
   movie( gcf, M, 5, 30 )  
   
end
   