# Kapitel 5_b:
# Der zentrale Zusammenstoß zweier fester Körper
# © 2015  Friedrich U. Mathiak, 
# mathiak@mechanik-info.de
# 
> restart:with(LinearAlgebra):
# Die folgende Prozedur ermöglicht die Berechnung der planaren Geschwindigkeiten zweier fester Körper in der (1,2)-Ebene nach einem zentralen Stoß . Die Beispiele orientieren sich an meinem  Buchtitel:
# F. U. Mathiak: Technische Mechanik 3, Kinematik und Kinetik  mit Maple- und MapleSim-Anwendungen, Verlag Walter de Gruyter, 2015
# Als Sonderfall kann der Stoß gegen eine starre Wand (Körper2)  untersucht werden.  Die Eingabe der Formalparameter erfolgt über Listen bzw. Listen von Listen (listlist). 
> Proc_Calc_23:=proc(r::listlist,M::list,v::listlist,epsilon,flag::integer)
> #---------------------------------------------------------------------------------
> # Eingabe: 
> #     r[1,1]: 1-Koordinate des Schwerpunktes des Körpers 1 vor dem Stoß
> #     r[1,2]: 2-Koordinate des Schwerpunktes des Körpers 1 vor dem Stoß
> #     r[2,1]: 1-Koordinate des Schwerpunktes des Körpers 2 vor dem Stoß
> #     r[2,2]: 2-Koordinate des Schwerpunktes des Körpers 2 vor dem Stoß
> #       M[1]: Masse des Körpers 1
> #       M[2]: Masse des Körpers 2
> #     v[1,1]: v11: 1-Koordinate der Geschwindigkeit des Körpers 1 vor dem Stoß
> #     v[1,2]: v12: 2-Koordinate der Geschwindigkeit des Körpers 1 vor dem Stoß
> #     v[2,1]: v21: 1-Koordinate der Geschwindigkeit des Körpers 2 vor dem Stoß
> #     v[2,2]: v22: 2-Koordinate der Geschwindigkeit des Körpers 2 vor dem Stoß
> #    epsilon: Stoßzahl (0 <= epsilon <= 1)
> #       flag: 0: Der Stoß zweier frei beweglicher Körper
> #             1: Stoß gegen eine starre Wand (Grenzfall m2 gegen unendlich)
> # Ausgabe:
> #         u1: Gemeinsame Schwerpunktsgeschwindigkeit am Ende der Kompressionsphase
> #         JK: Stoß der Kompressionsphase
> #         JR: Stoß der Restitutionsphase
> #          J: Gesamtstoß J = JK + JR
> #        c11: Geschwindigkeit des Körpers 1 in x1-Richtung nach dem Stoß
> #        c12: Geschwindigkeit des Körpers 1 in x2-Richtung nach dem Stoß
> #        c21: Geschwindigkeit des Körpers 2 in x1-Richtung nach dem Stoß
> #        c22: Geschwindigkeit des Körpers 2 in x2-Richtung nach dem Stoß
> #         c1: Betrag der Geschwindigkeit des Körpers 1 nach dem Stoß
> #         c2: Betrag der Geschwindigkeit des Körpers 2 nach dem Stoß
> #         EV: Kinetische Energie beider Körper vor  dem Stoß
> #         EN: Kinetische Energie beider Körper nach dem Stoß
> #         DE: Energieverlust
> #----------------------------------------------------------------------------------
> local gl1,gl2,gl3,gl4,gl5,gl6;
> global u1,JK,JR,J,c11,c12,c1,c21,c22,c2,EV,EN,DE,alpha1,beta1;
> description "Der zentrale Zusammenstoß zweier fester Körper";
> u1:='u1'; c11:='c11'; c21:='c21'; JK:='JK'; JR:='JR';
> if flag < 0 or flag > 1 then 
>   print(`Überprüfen Sie den Parameter flag,\n !!!! Berechnung wurde abgebrochen!!!!`);
>   return;
> end if;
>   c12:=v[1,2]; c22:=v[2,2];
>   gl1:=M[1]*(u1-v[1,1])=-JK;
>   gl2:=M[2]*(u1-v[2,1])= JK;
>   gl3:=M[1]*(c11-u1)   =-JR;
>   gl4:=M[2]*(c21-u1)   = JR;
>   gl5:=JR=epsilon*JK;
>   solve({gl1,gl2,gl3,gl4,gl5},{u1,c11,c21,JK,JR}); assign(%);
>   EV:=simplify(1/2*(M[1]*(v[1,1]^2+v[1,2]^2) + M[2]*(v[2,1]^2+v[2,2]^2)));   # Energie vor  dem Stoß
>   EN:=simplify(1/2*(M[1]*(c11^2   +   c12^2) + M[2]*(c21^2   +   c22^2)));   # Energie nach dem Stoß     
>   if flag = 1 then    #Der zentrale Stoß gegen eine starre Wand (m2 gegen unendlich)
>     u1 :=limit(u1 ,M[2]=infinity);
>     c11:=limit(c11,M[2]=infinity); 
>     c21:=limit(c21,M[2]=infinity); 
>     JK :=limit(JK ,M[2]=infinity);
>     JR :=limit(JR ,M[2]=infinity);  
>     EV :=limit(EV ,M[2]=infinity);
>     EN :=limit(EN ,M[2]=infinity);
>   end if;
> c1:=sqrt(c11^2+c12^2); c2:=sqrt(c21^2+c22^2);
> alpha1:=evalf(convert(arctan(c12,c11),degrees));
> beta1 :=evalf(convert(arctan(c22,c21),degrees)); 
> J :=simplify(JK+JR);     # Gesamter Stoß
> DE:=simplify(EV - EN);   # Energieverlust
> # Ausgabe der Ergebnisse für den zentralen Stoß
> print(`Gemeinsame Geschwindigkeit am Ende der Kompressionsphase u1 = `,u1);
> print(`Teilstoß  JK = `,JK);
> print(`Teilstoß  JR = `,JR);
> print(`Gesamtstoß J = `, J);
> print(`Geschwindigkeit c11 = `,c11);
> print(`Geschwindigkeit c12 = `,c12);
> print(`Geschwindigkeit c1  = `, c1);
> print(`alpha1 = `,alpha1);
> print(`Geschwindigkeit c21 = `,c21);
> print(`Geschwindigkeit c22 = `,c22);
> print(`beta1 = `,beta1);
> print(`Geschwindigkeit c2  = `, c2);
> print(`Energie vor  dem Stoß = `,EV);
> print(`Energie nach dem Stoß = `,EN);
> print(`Energieverlust = `,factor(DE));
> end proc:
# Es werden einige Beispiele berechnet, wobei wir mit dem geraden zentralen Stoß beginnen.
> rs:=[[0,0],[0,0]]: M:= [m1,m2]: v:=[[v11,0],[v21,0]]:
# 1. Der gerade zentrale Stoß
# Der allgemeine Fall:
> Proc_Calc_23(rs,M,v,epsilon,0);
# Es werden noch einige Sonderfälle betrachtet
# 1. Fall:  õ = 1 (der ideal elastische Stoß) 
> Proc_Calc_23(rs,M,v,1,0);
# 2. Fall: õ = 0 (der ideal inelastische Stoß, beide Körper bewegen sich nach dem Stoß mit derselben Geschwindigkeit u weiter)) 
> Proc_Calc_23(rs,M,v,0,0);
# 3. Fall: m1 = m2 = m 
> M:= [m,m]:
> Proc_Calc_23(rs,M,v,epsilon,0);
# 4. Fall: Stoß eines Körpers mit der Masse m1 =  m  gegen eine starre Wand (flag = 1)
> M:= [m,m2]: v:=[[v11,0],[0,0]]:
> Proc_Calc_23(rs,M,v,epsilon,1);
# Beispiel 5-1:  (Rückprall einer Kugel der Masse m1 = m von einer starren Unterlage)
> v:=[[sqrt(2*g*h0),0],[0,0]]:
> Proc_Calc_23(rs,M,v,epsilon,1);
# 2. Der schiefe zentrale Stoß
# Wir behandeln in einem ersten Schritt den allgemeinen Fall.
> M:= [m1,m2]: v:=[[v11,v12],[v21,v22]]:
> Proc_Calc_23(rs,M,v,epsilon,0);
# oder 
> v:=[[v1*cos(alpha0),v1*sin(alpha0)],[v2*cos(beta0),v2*sin(beta0)]]:
> Proc_Calc_23(rs,M,v,epsilon,0):
# Beispiel 5-2:  
> m1:=1; m2:=2; v1:=2; v2:=1; alpha0:=evalf(Pi/4); beta0:=evalf(3*Pi/4); epsilon:=0.5;
> Proc_Calc_23(rs,M,v,epsilon,0);
# Beispiel 5-3: Schiefer zentraler Stoß einer nicht rotierenden Kugel gegen eine glatte Wand (flag = 1)
> m1:='m1': m2:='m2': v1:='v1': v2:='v2': alpha0:='alpha0': beta0:='beta0': epsilon:='epsilon':
> M:=[m1,m2]: v:=[[v1*cos(alpha0),v1*sin(alpha0)],[0,0]]:
> Proc_Calc_23(rs,M,v,epsilon,1);
> 
;
