# Simulation: Freier Fall einer Styroporkugel (r = 10cm; ρ = 20kg/m³) mit Luftwiderstand

## Konstanten:
g =	       9.81 # m/s²  (Fallbeschleunigung Erde)
m =        0.08	# kg    (Masse des Körpers)
c_w =	   0.45	#       (Luftwiderstandsbeiwert)
A =        0.03 # m²    (Fläche des Körpers normal zur Bewegungsrichtung)
rho =      1.29 # kg/m³ (Dichte des Mediums)

## Anfangsbedingungen:
s_0 =    100    # m     (Anfangshöhe)
v_0 =      0    # m/s   (Anfangsgeschwindigkeit)

## Genauigkeit:
dt =       0.2  # s     (Zeitschritt)

list_t = []
list_s = []
s = s_0
v = v_0
t = 0
while s > 0:
    list_t.append(t)
    list_s.append(s)
    F = (-m*g) + (-0.5*c_w*A*rho*abs(v)*v)
    a = F/m
    s += v * dt # Neues s aus dem alten Wert von v berechnen.
    v += a * dt # Neues v aus dem alten Wert von a berechnen.
    t += dt

## Textausgabe:
print("Falldauer: ", round(t,3), " s")
print("Endgeschwindigkeit:", round(v,3), "m/s")

## Diagramm:
import matplotlib.pyplot as plt
plt.plot(list_t, list_s, 'ro')
plt.ylabel('Höhe (m)')
plt.xlabel('Zeit (s)')
plt.title('Simulation: Freier Fall einer Styroporkugel mit Luftwiderstand aus '+str(s_0)+'m')
plt.show()
