# Kapitel_01_b:
# Die Kinematik der Punktbewegung
# © 2015 Friedrich U. Mathiak
# mathiak@mechanik-info.de
# 
> restart:   with(plots): with(VectorCalculus): with(Student[VectorCalculus]):
# Beispiel 1-2:
# Ein Massenpunkt P mit dem Ortsvektor  r  bewege sich auf einer Raumkurve. Gesucht werden Geschwindigkeit und Beschleunigung in natürlichen Koordinaten. Weiterhin sind der Krümmungsradius R, die Krümmung kappa = 1/R und die Torsion tau bereitzustellen. Außerdem sollen das begleitende Dreibein und der Krümmungskreis in animierter Form längs der Bogenlänge s dargestellt werden.
> Proc_Calc_01:=proc(x,y,z)
> #--------------------------------
> #Eingabe:  
> #     x,y,z: Komponenten des Ortsvektors r
> #Ausgabe:
> #         s: Bogenlänge beginnend bei t = 0
> #         T: Tangenteneinheitsvektor
> #         N: Normaleneinheitsvektor
> #         B: Bi-Normaleneinheitsvektor
> #         R: Radius des Krümmungskreises
> #     kappa: Krümmung
> #       tau: Torsion oder Windung
> #         v: Bahngeschwindigkeit
> #        at: Tangentialbeschleunigung
> #        an: Normal- oder Zentripetalbeschleunigung
> #-----------------------------------
> local  cf,r,rp,rpp,rppp,rpb,rpkrpp,vn;
> global s,T,N,B,v,kappa,R,tau,at,an;
> description "Geschwindigkeit und Beschleunigung in natürlichen Koordinaten";
> cf    := conjugate = false;
> r     := <x,y,z>;
> rp    := simplify(diff(r  ,t));
> rpp   := simplify(diff(rp ,t));
> rppp  := simplify(diff(rpp,t));
> rpb   := simplify(LinearAlgebra[VectorNorm](rp,2,cf));
> rpkrpp:= simplify(rp &x rpp);
> vn    := LinearAlgebra[VectorNorm](rpkrpp,2,cf);
> kappa := simplify(vn/rpb^3) assuming t > 0;                          
> R     := simplify(1/kappa);                                        
> tau   := simplify(LinearAlgebra[DotProduct](rpkrpp,rppp,cf)/vn^2);
> T     := simplify(LinearAlgebra[Normalize](rp,2,cf));  
> N     := simplify(LinearAlgebra[Normalize](diff(T,t),2,cf));
> B     := simplify(T &x N);    
> s     := int(rpb,t = 0..t) assuming t > 0;     
> v     := simplify(diff(s ,t));
> at    := simplify(diff(sp,t));
> an    := simplify(kappa*v^2);
> # Ausgabe der Ergebnisse
> print(`Bogenlänge s(t) = `,simplify(s));
> print(`Tangenteneinheitsvektor     T = `,T);
> print(`Normaleneinheitsvektor      N = `,N);
> print(`Bi-Normaleneinheitsvektor  Bi = `,B);
> print(`Radius des Krümmungskreises R = `,R);
> print(`Krümmung  kappa       = `,kappa);
> print(`Torsion oder Windung  = `,tau);
> print(`Bahngeschwindigkeit v = `,v);
> print(`Tangentialbeschleunigung  at = `,at);
> print(`Normal- oder Zentripetalbeschleunigung  an = `,an);
> end proc:
# Wir wählen die Werte des Beispiels:
> x1:=a*cos(omega*t): x2:=a*sin(omega*t): x3:=b*omega*t:
# Mit diesen Werten wird die Prozedur aufgerufen
> Proc_Calc_01(x1,x2,x3);
# Wir überprüfen die Einheitsvektoren des begleitenden Dreibeins mit den Maple-Prozeduren aus der Bibliothek  Student[VectorCalculus] 
> r:= <x1,x2,x3>;
> (T,N,Bi):= VectorCalculus[TNBFrame](r, t ) assuming a::positive, b::positive, omega::positive;
> R:=VectorCalculus[RadiusOfCurvature](r,t) assuming a::positive,b::positive,omega::positive;
> kappa:=simplify(Student[VectorCalculus][Curvature](r, t )) assuming a::positive,b::positive,omega::positive;
> tau:=Student[VectorCalculus][Torsion](r,t) assuming a::positive,b::positive,omega::positive;
# Zur  Animation der Zustandsgrößen benötigen wir die Werte für a, b und É. Mit den Werten des Beispiels sind
> a:=1:  b:=1/2: omega:=1: r;
> pl1:=Student[VectorCalculus][TNBFrame](<x1,x2,x3>,t,range=0..2*Pi, labels=[x, y, z],output=animation, scaling=constrained, axes=boxed,normaloptions=[orientation=[240, 130]],frames=30):
> pl2:=Student[VectorCalculus][RadiusOfCurvature](<x1,x2,x3>,output=animation,circles=30,scaling=constrained,axes=boxed,labels=[x,y,z],range = 0..2*Pi):
> pl3:=Student[VectorCalculus][TNBFrame](<x1,x2,x3>,t,output=plot,labels=[x, y, z],scaling=constrained,axes=boxed, normaloptions=[orientation=[240, 130]]):
> display(Matrix(1,3,[pl1,pl2,pl3]));
> restart:
# Die geradlinige Bewegung
# 1. a = 0
# Aus a = 0 folgt  durch Integration v(t) = const. Eine geradlinige Bewegung mit konstanter Geschwindigkeit wird gleichförmige Bewegung genannt. Zur Ermittlung des Weges gehen wir aus von:
> ode:=diff(x(t),t)=v0;
> AB:=x(t0)=x0;
> loe:=dsolve({ode,AB});
# Der gesuchte Weg ist:
> x:=unapply(loe,t);
# 2. a = a0
> restart:
# Eine geradlinige Bewegung mit konstanter Beschleunigung wird gleichmäßig beschleunigte Bewegung genannt. Wir beginnen die Zeitzählung bei t = t0  und gehen von folgenden Anfangswerten aus: x(t = 0) = x0, v(t = 0) = v0. Eine Trennung der Veränderlichen und anschließende Integration ergibt
> ode2:=diff(x(t),t,t)=a0;
> AB:=x(0)=x0,D(x)(0)=v0;
> loe:=dsolve({ode2,AB}): assign(%);
> x:=unapply(x(t),t);
> v:=unapply(diff(x(t),t),t);
# Beispiel 1-3:
# Der freie Fall eines schweren Körpers K stellt bei Vernachlässigung des Luftwiderstandes eine gleichmäßig beschleunigte Bewegung mit a = a0 dar. Die konstante Beschleunigung ist hier die Erdbeschleunigung g, wobei zu beachten ist, dass g in die negative x-Richtung zeigt
> a0:=-g; v0:=0; x0:=h;
> x(t); v(t);
> x(T); loe:=solve(x(T),T); loe[1];
> v(loe[1]);
# 3. a = a(t)
# Ist die Beschleunigung eine Funktion der Zeit, dann lassen sich Geschwindigkeit und Beschleunigung durch bestimmte Integration ermitteln. 
> restart:
> ode2:=diff(x(t),t,t)=a(t);
> dsolve(ode2);
# 4. a = a(v)
# Ist die Beschleunigung eine Funktion der Geschwindigkeit, dann erfolgt die Lösung durch Trennung der Veränderlichen.
> restart:
> ode:=diff(t(v),v)=1/a(v);
> AB:=t(v0)=t0;
> loe:=dsolve({ode,AB},t(v)); assign(%);
# Beispiel 1-4:
# Die Bewegung eines Körpers in einer reibungsbehafteten Flüssigkeit erfolgt nach dem Gesetz. Die Proportionalitätskonstante kappa hängt von der Masse, der Form des Körpers und der Viskosität  der Flüssigkeit ab. Wir beginnen die Zeitzählung bei t0 = 0. Als Anfangsbedingungen sollen die Auslenkung x(0) = x0 und die Geschwindigkeit v(0) = v0 vorgegeben sein.
> restart:
> a(v):=-kappa*v; t0:=0;
> ode:=diff(t(v),v)=1/a(v);
> AB:=t(v0)=t0;
> loet:=dsolve({ode,AB},t(v));
> v:=unapply(solve(t-rhs(loet),v),t);
> ode:=diff(x(t),t)-v(t);
> loe:=dsolve({ode,x(0)=x0},x(t)): assign(%);
> x:=unapply(x(t),t);
# Geschwindigkeits-Zeit-Diagramm
> kappa:=1.5; v0:=1;
> plot(v,0..5,title = "\nGeschwindigkeits-Zeit-Diagramm\n", titlefont = ["ARIAL", 15], labels = ["Zeit t", "Geschwindigkeit v"], labeldirections = ["horizontal", "vertical"], labelfont = ["HELVETICA", 10], axesfont = ["HELVETICA", "ROMAN", 8],axes=boxed,gridlines);
# Weg-Zeit-Diagramm
> x0:=0.1;
> plot(x,0..3,y=0..x0+v0/kappa,title = "\nWeg-Zeit-Diagramm\n", titlefont = ["ARIAL", 15], labels = ["Zeit t", "Weg x"], labeldirections = ["horizontal", "vertical"], labelfont = ["HELVETICA", 10], axesfont = ["HELVETICA", "ROMAN", 8], axes=boxed,gridlines);
> 
;
