# Kapitel 5_a:
# Die rückprallende Kugel
# © 2015 Friedrich U. Mathiak,
# mathiak@mechanik-info.de
# 
> restart; with(LinearAlgebra): with(plots):
# Beispiel 5-1:
# 
# Zur experimentellen Bestimmung der Stoßzahl µ  lässt man eine kleine Kugel aus der Höhe h0 auf eine glatte möglichst Platte fallen. Da während des Stoßes unvermeidlich kinetische Energie verlorengeht, erreicht die Kugel beim ersten Rückprall nur noch die Höhe h1 (s.h. obige Abb.). In Erweiterung zur theoretischen Untersuchung (s.h. Buch TM 3) soll hier der Bewegungszustand der rückprallenden Kugel animiert werden. Wir definieren zunächst die Oberfläche der starren Platte:
> OFP:= 0.0; xE:=2.;
> plot(OFP, x = 0 .. xE, scaling = constrained):
# Der Geschwindigkeitsvektor des Balls:
> V := Vector([diff(x(t), t), diff(y(t), t)]);
# Der Normalenvektor der Plattenoberfläche:
> N := Normalize(Vector([[-(diff(OFP,x))],[1]]),2, conjugate = false);
# Der Geschwindigkeitsvektor nach dem Rückprall
> V_rueck:=-(1+epsilon)*(Transpose(V).N)*N+V;
> V_rueck:=simplify(V_rueck,symbolic);
# Stoßzahl µ
> epsilon := .8; h0:=5.;
# Differenzialgleichungen und Anfangsbedingungen
> DGLn := diff(y(t), t, t) = -9.81, diff(x(t), t, t) = 0;
> AB := (D(x))(0) = 0., (D(y))(0) = 0., x(0) = xE/2, y(0) = h0;
> simplify(V_rueck);
# Lösung der Differentialgleichungen 
> tE:=5.0; #Ende der Simulationszeit
;
> sol := dsolve({DGLn, AB}, {x(t), y(t)}, numeric, events = [[y(t) = eval(OFP, x = x(t)), [temp = diff(x(t), t), diff(x(t), t) = V_rueck[1], diff(y(t), t) = subs(diff(x(t), t) = temp, V_rueck[2])]]], range = 0 .. tE, output = listprocedure);
# Animation der Bewegung
> xanim := subs(sol, x(t)):
> yanim := subs(sol, y(t)):
> p1 := plot(OFP, x = 0 .. xE, color = blue, thickness = 3):
> p2 := animate(pointplot, [[xanim(t), yanim(t)], symbol = solidcircle, symbolsize = 25, color = blue], t = 0 .. tE, frames = 100):
> display(p1, p2, view = [0 .. xE, 0 .. h0], scaling = constrained, gridlines = true);
> 
;
