function animation(t, y, x0, y0, z0, v0, vx, vy, vz, vw, eta, ye_end, ye_top, method, ye, approxi, X_B, Y_B, Z_B)

% function erzeugt 2D/3D Ausgabe der Flugbahn und stellt v bzw. Flugbahn in
% Abhaengigkeit von Zeit dar

%-------------------------x-Werte fuer Boden-------------------------------
if (y(length(y),1) == 0)
    x_start = -1;
    x_step = 2/10;
    x_end = 1;
else
    x_start = min(y(:,1)) - abs(max(y(:,1))/4);
    x_step = (abs(min(y(:,1))) + abs(max(y(:,1))) + abs(max(y(:,1))/2))/10;
    x_end = abs(max(y(:,1))) + abs(max(y(:,1))/4);
end

%-------------------y-Werte fuer Boden mit/ohne Wind-----------------------
if (vw == 0 | vw > 0 & eta == 0 | vw > 0 & eta == 180)
   y_start = y0 - 10;
   y_step = (2*y0 + 20)/10;
   y_end = y0 + 10;
else
   y_start = -(abs(y0) + abs(y(length(y),5))) -(abs(y0) + abs(y(length(y),5)))/3;
   y_step = 8/3*(abs(y0) + abs(y(length(y),5)))/10;
   y_end = (abs(y0) + abs(y(length(y),5))) + (abs(y0) + abs(y(length(y),5)))/3;
end

%--------------------x-Werte fuer Boden falls Berg-------------------------
if z0 > 0 & v0 > 0
    %F?r den Fall dass Geschoss von Wind hinter Ende des Berges
    %getragen wird
    if min(y(:,1)) < min(min(X_B))
        xB_start = min(min(X_B));        
        add1 = 1;
    else
        add1 = 0;
        xB_start = min(min(X_B));
    end
    xB_step = 0.05*z0;
    if max(y(:,1)) < max(max(X_B))
        xB_end = max(max(X_B));
    else
        xB_end = abs(max(y(:,1))) + abs(max(y(:,1))/4);
    end
end

%----------------------y-Werte fuer Boden falls Berg-----------------------
if z0 > 0 & v0 > 0
    yB_start = Y_B(1);
    yB_step = 0.5*z0;
    yB_end = Y_B(end);
end


%----------------------------Ebene mit/ohne Berg---------------------------
if z0==0 | (z0 > 0 & v0 == 0)
    mesh_X = x_start:x_step:x_end;
    mesh_Y = y_start:y_step:y_end;
    [X1,Y1] = meshgrid(mesh_X,mesh_Y);
    Z1 = X1;
    Z1(:,:)= 0;
elseif z0 > 0 & v0 > 0
    mesh_X = xB_start:xB_step:xB_end;
    mesh_Y = yB_start:yB_step:yB_end;
    [X1,Y1] = meshgrid(mesh_X,mesh_Y);
    %h... Hilfsvariablen, Z1 muss erstellt werden - dabei wird Z_B (der Berg) in
    %0-Matrizen eingebettet um gleiche Groesse wie X1 und Y1 zu erhalten
    %Matrixdim. Berg
    h_xb1 = size(X_B,1);
    h_xb2 = size(X_B,2);
    %Matrixdim. Boden
    h_x1 = size(X1,1);
    h_x2 = size(X1,2); 
    
    %Hilfsvariablen, Berechnung wie gross 0-Matrizen zur Einbettung des
    %Berges
    h2 = round((h_x2 - h_xb2)/2);
    h1 = round((h_x1 - h_xb1)/2);
    h3 = find(X1==0);
    
    if ~isempty(h3)
        h3 = round(h3(1)/length(h3))-19;
        h4 = length(X1(1,:)) - h_xb2 - h3;
    else
        h4 = length(X1(1,:)) - h_xb2;  
    end
    
    % Verschmelzen der Matrizen
    if h3 > 0
        Z1 = cat(2,zeros(h_xb1,h3),Z_B);
        Z1 = cat(2,Z1,zeros(h_xb1,h4));
    end
    
    Z1 = cat(2,Z_B,zeros(h_xb1,h4));
    
    if h1 > 0  
        Z1 = cat(1,zeros(h1,h_x2),Z1);
        Z1 = cat(1,Z1,zeros(h1,h_x2));
    end
    %Fuer den Fall dass Geschoss von Wind hinter Ende des Berges
    %getragen wird
    if add1 == 1
        if abs(min(y(:,1)))-abs(min(min(X_B))) < 100 
            X1 = cat(2,X1(:,1)-100,X1);
        elseif abs(min(y(:,1)))-abs(min(min(X_B))) < 500 & abs(min(y(:,1)))-abs(min(min(X_B))) > 100
            X1 = cat(2,X1(:,1)-500,X1);
        else
            X1 = cat(2,X1(:,1)-2000,X1);
        end
        Y1 = cat(2,Y1(:,1),Y1);
        Z1 = cat(2,Z1(:,1),Z1);
    end
end



%----------------------Graphische Ausgabe----------------------------------
%Bildschirmaufloesung ermitteln
scrsz = get(0,'ScreenSize');
colordef white;

switch lower(method)
    case 'einfach'

%-------------------2D plot dx/dy------------------------------------------
        if ~(z0 > 0 & v0 == 0)
        fg2 = figure('Position',[50 100 scrsz(3)-100 scrsz(4)-150]);

        p2 = plot(y(:,1)./1000,y(:,3)./1000,'r');
        xlabel('Distanz (km)');
        ylabel('Hoehe (km)');
        legend(p2,'Bahnkurve des Geschosses',-1);
        title('Plot 2: Darstellung der Flugbahn 2D');

        str(1)={['Distanz: ',int2str(ye_end(1)),'m']};
        str(2)={['Flugzeit: ',int2str(t(end)),'s']};
        str(3)={['Maximale Flughoehe: ',int2str(ye_top(3)),'m']};
        str(4)={['Anfangsgeschwindigkeit v0: ',int2str(v0),'m/s']};
        str(5)={['Geschwindigkeit vx: ',int2str(vx),'m/s']};
        str(6)={['Geschwindigkeit vy: ',int2str(vz),'m/s']};
        str(7)={['Drift durch Wind: ',int2str(abs(y0-ye_end(5))),'m']};

        %Position des Textes
        t21 = text((x0+ye_end(1))/2100,0+(z0+ye_top(3))/5000,str);
        end
        
%-------------------Abhaengigkeit der Groessen von t--------------------------

        fg3 = figure('Position',[50 100 scrsz(3)-100 scrsz(4)-150]);

        subplot(2,2,1);
        p2 = plot(t,y(:,1),'r');
        xlabel('Zeit t');
        ylabel('Weg x');
        legend(p2,'dx/dt',-1);
        title('Weg x in Abhaengigkeit von t');

        subplot(2,2,2);
        p2 = plot(t,y(:,2),'r');
        xlabel('Zeit t');
        ylabel('Geschwindigkeit vx');
        legend(p2,'dvx/dt',-1);
        title('Geschwindigkeit vx in Abhaengigkeit von t');

        subplot(2,2,3);
        p2 = plot(t,y(:,3),'r');
        xlabel('Zeit t');
        ylabel('Weg y');
        legend(p2,'dy/dt',-1);
        title('Weg y in Abhaengigkeit von t');

        subplot(2,2,4);
        p2 = plot(t,y(:,4),'r');
        xlabel('Zeit t');
        ylabel('Geschwindigkeit vy');
        legend(p2,'dvy/dt',-1);
        title('Geschwindigkeit vy in Abhaengigkeit von t');

%---------------------------3D plot----------------------------------------

        fg1 = figure('Position',[50 100 scrsz(3)-100 scrsz(4)-150],'Color',[0.9 1 1]);  

        % 3D Darstellung in der Ebene
        if (x0==0 & y0==0 & z0==0) | (x0==0 & y0==0 & z0>0 & v0==0) 
    
            surf(X1,Y1,Z1,'EdgeColor','none');
            hold on;
            xlim([x_start x_end]);
            ylim([y_start y_end]);
            zlim([0 ye_top(3) + ye_top(3)/10]);
            view(20,10);
            title('Plot 1: Darstellung der Flugbahn 3D');
            xlabel('Distanz (m)');
            ylabel('Z-Koordinate (m)');
            zlabel('Hoehe (m)');
            pbaspect([2 1 1]);
    
            %Erzeugt Punkt-plot in 3D Umgebung
            ppkt = plot3(y(1,1),y(1,5),y(1,3),'o','MarkerFaceColor','r','EraseMode','xor'); 
            % Plotfn fuer Geschwindigkeitsvektoren
            pqiv = quiver3(y(1,1),y(1,5),y(1,3),y(1,2),y(1,6),y(1,4),3);
            %Zeitdarstellung
            ptext = text(y_end(1),ye_top(5),ye_top(3),'Zeit   0.00 s');
            drawnow;

            %Animiert Flugbahn
            for i = 1: length(t)
                set(ppkt,'XData',y(i,1),'YData',y(i,5),'ZData',y(i,3));
                delete(pqiv); 
                pqiv = quiver3(y(i,1),y(i,5),y(i,3),y(i,2),y(i,6),y(i,4));
                timet = sprintf('Zeit %6.2f s',t(i));
                set(ptext,'String',timet);
                drawnow;
            end
        
            %Flugbahn
            p3 = plot3(y(:,1),y(:,5),y(:,3),'Color','r', 'LineWidth',3);
            
            %Koordinatenangaben
            str1 = {['Startkoord: (',int2str(x0),',',int2str(z0),',',int2str(y0),')']};
            t11 = text(x0+ye_end(1)/10,y0-y0/2,z0+ye_top(3)/10,str1);     
            if ~(z0>0 & v0 == 0)
                str2 = {['Climax: (',int2str(ye_top(1)),',',int2str(ye_top(3)),',',int2str(ye_top(5)),')']};
                t12 = text(ye_top(1),ye_top(5),ye_top(3)+ye_top(3)/10,str2);
            end
            str3 = {['Destination: (',int2str(ye_end(1)),',',int2str(ye_end(3)),',',int2str(ye_end(5)),')']};
            t13 = text(ye_end(1),ye_end(5),ye_end(3)+ye_top(3)/10,str3);
            
            
            %Stellt Annaeherung an den Endwert dar falls Zieldistanz
            %ermittelt wird
            if ~isempty(approxi)
                app = plot3(approxi(:,1),approxi(:,5), approxi(:,3)+1,'o','MarkerFaceColor','r');
            end
            
            hold off;
        %3D Darstellung mit Berg
        else 
            surf(X1,Y1,Z1,'EdgeColor','none');
            hold on;
            if add1 == 1
                if abs(min(y(:,1)))-abs(min(min(X_B))) < 100 
                    xlim([xB_start-100 xB_end]);
                elseif abs(min(y(:,1)))-abs(min(min(X_B))) < 500 & abs(min(y(:,1)))-abs(min(min(X_B))) > 100
                    xlim([xB_start-500 xB_end]);
                else
                    xlim([xB_start-2000 xB_end]);
                end
            else
                xlim([xB_start xB_end]);
            end
            ylim([yB_start yB_end]);
            zlim([y0 ye_top(3) + ye_top(3)/10]);
            view(20,10);
            pbaspect([2 1 1]);
            title('Plot 1: Darstellung der Flugbahn 3D');
            xlabel('Distanz (m)');
            ylabel('Z-Koordinate (m)');
            zlabel('Hoehe (m)');
    
            %Erzeugt Punkt-plot in 3D Umgebung
            ppkt = plot3(y(1,1),y(1,5),y(1,3),'o','MarkerFaceColor','r','EraseMode','xor'); 
            % Plotfn fuer Geschwindigkeitsvektoren
            pqiv = quiver3(y(1,1),y(1,5),y(1,3),y(1,2),y(1,6),y(1,4));
            %Zeitdarstellung
            ptext = text(xB_start,0,ye_top(3),'Zeit   0.00 s');
            drawnow;

            %Animiert Flugbahn
            for i = 1: length(t)
                set(ppkt,'XData',y(i,1),'YData',y(i,5),'ZData',y(i,3));
                delete(pqiv); 
                pqiv = quiver3(y(i,1),y(i,5),y(i,3),y(i,2),y(i,6),y(i,4));
                timet = sprintf('Zeit %6.2f s',t(i));
                set(ptext,'String',timet);
                drawnow;
            end
    
            %Zeichnet Flugbahn nach
            p3 = plot3(y(:,1),y(:,5),y(:,3),'Color','r', 'LineWidth',3);
            
            %Koordinatenangaben
            str1 ={['Startkoord: (',int2str(x0),',',int2str(z0),',',int2str(y0),')']};
            t11 = text(x0,y0-y0/2,z0+ye_top(3)/20,str1,'HorizontalAlignment','right','FontSize',7); 
            str2 ={['Climax: (',int2str(ye_top(1)),',',int2str(ye_top(3)),',',int2str(ye_top(5)),')']};
            t12 = text(ye_top(1),ye_top(5),ye_top(3)+ye_top(3)/20,str2,'HorizontalAlignment','left','FontSize',7);
            str3 ={['Destination: (',int2str(ye_end(1)),',',int2str(ye_end(3)),',',int2str(ye_end(5)),')']};
            t13 = text(ye_end(1),ye_end(5),ye_end(3)+ye_top(3)/5,str3,'HorizontalAlignment','left','FontSize',7);
            
            
            if ~isempty(approxi)
                app = plot3(approxi(:,1),approxi(:,5), approxi(:,3));
            end
            
            hold off;
        end

    otherwise
        disp('Fehler');
end

