function [] = schuss2(z0_e, x0_e, phi_e, m_e, rho_e, quer_e, temp_e, vw_e, eta_e, cl_e, error_e, checkb)

global rho0 m quer t0 var cl a vwx vwy z0 var2 

% Default-Eingabewerte
default = {'0','5000','45','30','1.293','0.1','20','0','0','0.2','5'};

%Umwandlung von strings zu numbers (falls ungueltige Eingabe wird []
%zurueckgegeben)
z0 = str2num(get(z0_e,'String'));  % Hoehendiff. zw. Start/Ziel  
dist = get(x0_e,'Value'); % Startgeschwindigkeit
phi = str2num(get(phi_e,'String')); % Abschuss - Anstellwinkel
m = str2num(get(m_e,'String')); % Masse Projektil
rho0= str2num(get(rho_e,'String')); % Luftdichte am Boden
quer = str2num(get(quer_e,'String')); % Querschnitt Projektil
temp = str2num(get(temp_e,'String')); % Temperatur Boden
vw = str2num(get(vw_e,'String')); % Geschwindigkeit Wind
eta = str2num(get(eta_e,'String')); % Richtung Wind
cl = str2num(get(cl_e,'String')); % coefficient of lift (crosswind)
error = str2num(get(error_e,'String')); % Tolerierbarer Fehler

%Abfrage ob Eingabewerte [] oder NaN
if (isempty(z0) | isnan(z0) | imag(z0)~=0) 
    z0 = str2num(default{1}); 
    disp('Hoehe auf Defaultwert gesetzt!'); 
end

if (isempty(dist) | isnan(dist) | dist<10 | imag(dist)~=0)
    dist = str2num(default{2}); 
    disp('Distanz auf Defaultwert gesetzt!'); 
end

if (isempty(phi) | isnan(phi) | phi==0 | imag(phi)~=0)
    phi = str2num(default{3}); 
    disp('Startwinkel auf Defaultwert gesetzt!'); 
end

if (isempty(m) | isnan(m) | m < 5 | imag(m)~=0)
    m = str2num(default{4}); 
    disp('Masse auf Defaultwert gesetzt!'); 
end

if (isempty(rho0) | isnan(rho0) | imag(rho0)~=0)
    rho0 = str2num(default{5}); 
    disp('Luftdichte auf Defaultwert gesetzt!'); 
end

if (isempty(quer) | isnan(quer) | quer==0 | imag(quer)~=0)
    quer = str2num(default{6}); 
    disp('Querschnitt auf Defaultwert gesetzt!'); 
end

if (isempty(temp) |isnan(temp) | imag(temp)~=0)
    temp = str2num(default{7}); 
    disp('Temperatur auf Defaultwert gesetzt!'); 
end

if (isempty(vw) | isnan(vw) | imag(vw)~=0)
    vw = str2num(default{8}); 
    disp('Windgeschwindigkeit auf Defaultwert gesetzt!'); 
end

if (isempty(eta) | isnan(eta) | imag(eta)~=0)
    eta = str2num(default{9}); 
    disp('Windrichtung auf Defaultwert gesetzt!'); 
end

if (isempty(cl) | isnan(cl) | cl==0 | imag(cl)~=0)
    cl = str2num(default{10}); 
    disp('Widerstandskoeff. Seite auf Defaultwert gesetzt!'); 
end

if (isempty(error) | isnan(error) | imag(error)~=0)
    error = str2num(default{11}); 
    disp('Fehler auf Defaultwert gesetzt!'); 
end


%Betragsbildung, keine negativen Eingabewerte erlaubt
z0 = abs(z0);
dist = abs(dist);
phi = abs(phi);
m = abs(m);
rho0 = abs(rho0);
quer = abs(quer);
vw = abs(vw);
eta = abs(eta);
cl = abs(cl);
error = abs(error);

%Einschraenkung der Eingabe auf sinnvolle Werte
if (z0 > 10000) z0 = 10000; disp('Maximalwert Starthoehe=30000 m gesetzt'); end
if (dist > 50000) dist = 50000; disp('Maximalwert Zielentfernung=10000 m gesetzt'); end
if (phi > 89) phi = 89; disp('Maximalwert Abschusswinkel=90grad gesetzt'); end
if (m > 3000) m = 3000; disp('Maximalwert Masse=3000 kg gesetzt'); end
if (rho0 > 2) rho0 = 2; disp('Maximalwert Luftdichte=2 kg/dm^3 gesetzt'); end
if (quer > 1) quer = 1; disp('Maximalwert Querschnitt=1 m^2 gesetzt'); end
if (temp > 60) temp = 60; disp('Maximalwert Bodentemperatur gesetzt'); end
if (vw > 38) vw = 38; disp('Maximalwert Windgeschwindigkeit=38 km/h (nach Beaufort Windstaerke 5 = frische Brise) gesetzt'); end
if (eta > 360) eta = 360; disp('Maximalwert Windrichtung gesetzt'); end
if (cl > 0.3) cl = 0.3; disp('Maximalwert Crosswind Koeffizient gesetzt'); end
if (error > dist/5) error = dist/5; disp('Maximalwert Fehler=Distanz/5 gesetzt'); end 

%Umrechnung der Einheiten
phi = phi*pi/180;
t0 = temp + 273.15;
vw = vw/3.6;
eta = eta*pi/180; 
vy = 0;
vwx = -vw*cos(eta);
vwy = -vw*sin(eta);
    
g1 = 9.81;
vx = sqrt(dist*g1/(2*tan(phi)));
vz = vx*tan(phi);
v0 = vz/sin(phi);
dvxdD = sqrt(g1/(2*tan(phi)*dist))/2;
dvdD = dvxdD/cos(phi);

% Ungefaehre Steigzeit/Fallzeit fuer Zeitintervall
t1 = vz/g1;
s = z0 + vz*t1 - (g1*t1^2)/2;
t2 = sqrt(2*s/g1);
delta = (t1+t2); % Verzoegerung Luftwid... etc.
tspan = t1 + t2 + delta*5;
t = linspace(0,tspan,1000);

x0 = 0;
y0 = 0;

if (z0 > 0 & v0 == 0)
    x0 = 0;
    y0 = 0;
    X_B = 0;
    Y_B = 0;
    Z_B = 0;
elseif (z0 > 0 & v0 > 0)
    %Berg und Abschusskoordinaten berechnen
x_berg_start = 0;
x_berg_stop = 1.5;
x_berg_step = 0.05;
y_berg_start = -3;
y_berg_stop = 3;
y_berg_step = 0.5;
X_berg = x_berg_start:x_berg_step:x_berg_stop;
Y_berg = y_berg_start:y_berg_step:y_berg_stop;
[X_B,Y_B] = meshgrid(X_berg,Y_berg);
Z_B = X_B .* exp(-X_B.^100 - Y_B.^2);
%Bergspitze auf 1 setzen
korr1 = max(max(Z_B));
Z_B = Z_B./korr1;
z_index = find(Z_B==1);
z_index = z_index(1);
%Koord. der Bergspitze in Nullpunkt setzen
korrx = X_B(z_index)
korry = Y_B(z_index)
X_B = X_B - korrx;
Y_B = Y_B - korry;
%Bergh?he Anfangsbedingungen angleichen
X_B = X_B.*z0;
Y_B = Y_B.*z0;
Z_B = Z_B.*z0;
else
    x0 = 0;
    y0 = 0;
    z0 = 0;
    X_B = 0;
    Y_B = 0;
    Z_B = 0;
end 

%-----------------------Integration---------------------------------------
%schuss_event gibt das Ereignis an, zu welchem Integration abgebrochen wird
options = odeset('AbsTol',[error 1 1 1 1 1],'Events','schuss_event');

try
    %Abfrage falls Epot und Ekin 0
    if dist == 0 & z0 == 0
        msgbox('dist=0 und z0=0! Objekt bewegungslos!')
    %Projektil faellt
    elseif dist == 0 & z0 > 0
        msgbox('Geschwindigkeit = 0!')
    else
        
    done = 0;
    schleifen = 0;
    error_then=0;
    % Vektor der Koordinaten der schrittweisen Annaeherungen enthaelt
    approxi = [];

    %Annaeherung an Zieldistanz
    while done == 0
        schleifen = schleifen + 1;
    
        anfangsw1 = [x0; vx; z0; vz; y0; vy];   
        %var bestimmt in schussparam.m Addition bzw. Subtraktion von
        %Luftwiderstand
        var = -1;
        %var2 bestimmt die benoetigte event-function in schuss_event
        var2 = 1;
        [ty1,y1,te,ye,ie] = ode15s(@schussparam,t,anfangsw1,options);
        %Endwerte der Integration
        ye_top = ye;
        te_top = te;
        anfangsw2 = [ye(1); ye(2); ye(3); ye(4); ye(5); ye(6)];
        var = 1;
        var2 = 2;
        [ty2,y2,te,ye,ie] = ode15s(@schussparam,t,anfangsw2,options);
        approxi = [approxi; ye];
        ye_end = ye;
        te_end = te;
        te = te_top + te_end;
    
        %Neuberechnung des Zeitvektors
        if te/tspan > 0.5
            tspan = 2*te;
            t = linspace(0,tspan,1000);
        end
    
        %Ueberpruefung auf Annaeherungsfehler
        error_now = (dist + x0) - ye_end(1);
        if abs(error_now) < error
            done = 1;
        else
            %Anpassung der Geschwindigkeit
            if error_then == 0
                v0 = v0 + dvdD*error_now;
                error_then = error_now;
            else
                dvdD = dvdD*(1+error_now/error_then);
                v0 = v0 + dvdD*error_now;
                error_then = error_now;
            end 
            vx = v0*cos(phi);
            vz = v0*sin(phi);
        end
        if v0 > 3.e8 
            msgbox('Lichtgeschwindigkeit erreicht')
            done = 1;
        end
    end
    end

    t = [ty1;ty1(end)+ty2(2:end,:)];
    y = [y1;y2(2:end,:)];

    method = 'einfach';
    if get(checkb,'Value') == 0
        disp('Keine graphische Ausgabe')
    else
        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);
    end
    
    %---------------------UIPanel figures--------------------------------------
    panel_graph(t, y, x0, y0, z0, v0, vx, vy, vz, vw, eta, ye_end, ye_top, method, ye, approxi, X_B, Y_B, Z_B) 
    
    catch
    msgbox('Abschussparameter unbalanciert (Integration konnte nicht zu Ende gefuehrt werden) oder 3D Simulation beendet. Berechnung abgebrochen')
end
