# Kapitel 2_j: Relativbewegungen
# © 2015 Friedrich U. Mathiak,
# mathiak@mechanik-info.de
# 
> restart: with(LinearAlgebra): with(PDEtools): with(plottools):  with(plots):
> alias(phi=phi(t),psi=psi(t)); declare(phi,psi,prime=t);
# Beispiel 2-18:
# Wir stellen eine Prozedur zur Verfügung, die die Relativbewegung eines im Raum beweglichen Punktes P gegenüber einem körperfesten Punkt A automatisiert bereitstellt.  
> Proc_Calc_14:= proc(s::Vector,z::Vector,R::Matrix)
> #------------------------------------------------------------------
> #  Eingabe:
> #    s: Ortsvektor zum Punkt A         (im raumf.   System) 
> #    z: Vektor,Lage von P relativ zu A (im körperf. System)
> #    R: Drehmatrix
> #  Ausgabe:
> #    r0: Lage des Punktes P     (im raumf.   System)
> #    r1: Lage des Punktes P     (im körperf. System)
> #    vf: Führungsgeschwindigkeit(im raumf.   System)
> #    vr: Relativgeschwindigkeit (im körperf. System)
> #    v0: Absolutgeschwindigkeit (im raumf.   System)
> #    v1: Absolutgeschwindigkeit (im körperf. System)
> #    af: Führungsbeschleunigung (im raumf.   System)
> #    ar: Relativbeschleunigung  (im körperf. System)
> #    ac: Coriolisbeschleunigung (im körperf. System)
> #    a0: Absolutbeschleunigung  (im raumf.   System)
> #    a1: Absolutbeschleunigung  (im körperf. System)
> #------------------------------------------------------------------
> local Rp,RT,omega1p,sp,spp,o1kz:
> global Omega0,Omega1,omega0,omega1,r0,r1,vf,vr,v0,v1,af,ar,ac,a0,a1:
> description "Berechnung der Relativbewegung eines im Raum beweglichen Punktes P gegenüber einem körperfesten Punkt A";
> Rp:=map(diff,R,t):
> RT:=LinearAlgebra[Transpose](R):
> Omega0:=simplify(Rp.RT);
> Omega1:=simplify(RT.Omega0.R);
> omega0:=Vector([Omega0[3,2],Omega0[1,3],Omega0[2,1]]);
> omega1:=Vector([Omega1[3,2],Omega1[1,3],Omega1[2,1]]);
> sp:=map(diff,s,t): spp:=map(diff,sp,t):
> #Lage des Punktes P
> r0:=s + R.z:
> r1:=simplify(RT.r0):
> #Geschwindigkeit
> o1kz:=LinearAlgebra[CrossProduct](omega1,z):
> vf :=sp + R.o1kz:
> vr :=map(diff,z,t):
> v0 :=vf + R.vr:
> v1:=simplify(RT.v0):
> #Beschleunigung
> omega1p:=map(diff,omega1,t);
> af :=spp + R.(LinearAlgebra[CrossProduct](omega1p,z)+LinearAlgebra[CrossProduct](omega1,o1kz));
> ar :=map(diff,vr,t):
> ac :=2*LinearAlgebra[CrossProduct](omega1,vr):
> a0 :=af + R.(ar+ac):
> a1:=simplify(RT.a0):
> #Ausgabe der Ergebnisse
> print(`Winkelgeschwindigkeitsvektor im raumf. System = `,omega0);
> print(`Winkelgeschwindigkeitsvektor im körperf. System = `,omega1);
> print(`Lage des Punktes P im raumf. System = `  ,r0);
> print(`Lage des Punktes P im körperf. System = `,r1);
> print(`Führungsgeschwindigkeit im raumf. System = `,vf);
> print(`Relativgeschwindigkeit im körperf. System = `,vr);
> print(`Absolutgeschwindigkeit im raumf. System = `, v0);
> print(`Absolutgeschwindigkeit im körperf. System = `,v1);
> print(`Führungsbeschleunigung im raumf. System = `, af);
> print(`Relativbeschleunigung im körperf. System = `,ar);
> print(`Coriolisbeschleunigung im körperf. System = `,ac);
> print(`Absolutbeschleunigung im raumf. System = `, a0);
> print(`Absolutbeschleunigung im körperf. System = `,a1);
> end proc:
# Wir lesen die Prozedur zur Berechnung der Drehmatrix R (Versor) ein.
> read "Proc_Calc_02.m":     #print(Proc_Calc_02);
# Mit dem Befehl  print(Proc_Calc_02)  kann die Prozedur auf dem Bildschirm angesehen werden (mit # hier auskommentiert):
# Um die Drehmatrix  R berechnen zu können, werden die Drehachse n  und der Drehwinkel  Õ benötigt. In dem von uns gewählten Koordinatensystem ist
> n:=Vector([0,0,1]):        #Einheitsvektor in Richtung der Drehachse
;
# Wir rufen die Prozedur auf
> Proc_Calc_02(n,phi,0):     #Berechnung der Drehmatrix (flag = 0:Eigenwertproblem wird nicht gelöst)
;
# Innerhalb der Prozedur wird die antimetrische Matrix der Winkelgeschwindigkeiten  ©(0) = R2ÅRT  berechnet und mittels der Transformation  ©(1) = RT Å ©(0) ÅR   im körperfesten Koordinatensystem dargestellt. Damit liegen  auch der Winkelgeschwindigkeitsvektoren  É(0)  und  É(1)   fest sowie die entsprechenden Größen im körperfesten System. Da der Ursprung für beide Koordinatensysteme identisch ist, gilt:
> s0:=Vector([0,0,0]):  #Im raumfesten Koordinatensystem
;
# Der Verbindungsvektor z vom Punkt A zum Punkt P ist im körperfesten Koordinatensystem:
> z1:=Vector([a + b*cos(psi),0,h + b*sin(psi)]):
> Proc_Calc_14(s0,z1,R):
# Mit den Werten des Beispiels 
> a:=1.5; h:=1.; b:=1.; phi:=t; psi:=2*t;
# Wir berechnen die Zustandsgrößen für die obigen Parameter
> Proc_Calc_14(s0,z1,R):
# Wir stellen noch diejenige Bahnkurve dar, die durch den Endpunkt des Ortsvektors (mit Darstellung des natürlichen Dreibeins) definiert wird.
> te:=2*Pi: #Endzeit der Animation
;
> Student[VectorCalculus][TNBFrame](r0,t,range=0..te, labels=[x1,x2,x3],output=animation, scaling=constrained, axes=boxed,normaloptions=[orientation=[-35, 75, 0]],titlefont=["Arial",15],title="\n Bahnkurve des Punktes P mit natürlichem Dreibein\n",frames=50);
# Wir beschaffen uns das Begleitende Dreibein (T: Tangenteneinheitsvektor, N: Normaleneinheitsvektor, B: Binormaleneinheitsvektor) und berechnen Geschwindigkeit und Beschleunigung in dieser Vektorbasis: 
> T:=Normalize(v0,Euclidean):
> N:=Normalize(map(diff,T,t)):
> B:=CrossProduct(T,N):
# Der Geschwindigkeitsvektor  tangiert zu jedem Zeitpunkt die Bahnkurve.
> v0T:=v0.T:
> plot(v0T,t=0..te,gridlines=true,axes=boxed,color=blue,titlefont=["Arial",15],title="\n Geschwindigkeit des Punktes P\n");
# Während der Geschwindigkeitsvektor die Bahnkurve tangiert, liegt der Beschleunigungsvektor in der von T und N aufgespannten Schmiegungsebene. 
> A0T:=a0.T: A0N:=a0.N:
> plot([A0T,A0N],t=0..te,title="\nBeschleunigung des Punktes P in natürlichen Koordinaten\n",titlefont = ["ARIAL", 15],legend=["Tangentialbeschleunigung","Normalbeschleunigung"],gridlines=true,axes=boxed,color=[black,blue],legendstyle=[font=["HELVETICA", 9],location=bottom]);
> 
;
