Statik: Initiierung des Programmmoduls

Erklärung zu den Funktionen im Modul initStatik: 
Auf den linken inneren Balken neben dem Programmcode klicken und Enter drücken. (Achtung: Enter ist nicht der "Wagenrücklauf" für den Cursor!)
Anschliessend im Modul StatikWork.nb weiterarbeiten.

(* Programmcode: *) 

(*  1 *)  
Remove["Global`*"];
(*  2 *)  
Off[ ];
Off[General::spell];
Off[General::spell1];
display={DisplayFunction->$DisplayFunction,AspectRatio->Automatic};
notDisplay=(DisplayFunction->Identity);


<<Graphics`Arrow`;

initStatik[nr_]:=Module[{},

(*  1 *) 

kResultOut[{x_,y__}]:=x+y;
kResultOut[x_,y__]:=x+y;
kResultPrint[{x_,y__}]:=Print["Resultierende Kraft kResultOut = ",x+y];
kResultPrint[x_,y__]:=Print["Resultierende Kraft kResultOut = ",x+y];

(*  2 *) 

geradeSchnittOut[pG1_,pG2_, qG1_,qG2_]:=
    Module[{gerade,λ,μ,pGI1,pGI2,λSchnitt,μSchnitt,
        pSchnitt1,pSchnitt2},
      Off[ ];Off[General::spell];Off[General::spell1];
      gerade[λ_,pGI1_,pGI2_]:=pGI1+λ (pGI2-pGI1);
      solvGSchnitt=Flatten[Solve[{
              Evaluate[gerade[λ,pG1,pG2][[1]]]== 
                Evaluate[gerade[μ,qG1,qG2][[1]]],
                Evaluate[gerade[λ,pG1,pG2][[2]]]== 
                Evaluate[gerade[μ,qG1,qG2][[2]]]},{λ,μ}]];                                                                                                                              
      λSchnitt= λ /.solvGSchnitt; 
      μSchnitt= μ /.solvGSchnitt; 
      pSchnitt1=gerade[λSchnitt,pG1,pG2]; 
      pSchnitt2=gerade[μSchnitt,qG1,qG2]; 
      If[pSchnitt1 == pSchnitt2,pSchnittOut=pSchnitt1,Print["Kein Schnitt"]]
      ]; 
geradeSchnittOut[{pG1_,pG2_, qG1_,qG2_}]:=  geradeSchnittOut[pG1,pG2, qG1,qG2];

richt[pGI1_,pGI2_]:=(pGI1-pGI2)/Norm[pGI1-pGI2];

kraftPunktZerleg[pG1_,pG2_, qG1_,qG2_,kIn_]:=Module[{λ,μ,pIntern},
solvZerleg=Flatten[Solve[richt[pG1,pG2] λ + richt[qG1,qG2] μ == kIn, {λ,μ}]];
kKomp1Out[pG1,pG2, qG1,qG2,kIn] = richt[pG1,pG2] λ/. solvZerleg;
kKomp2Out[pG1,pG2, qG1,qG2,kIn] = richt[qG1,qG2] μ/. solvZerleg;
Print["kKomp1out = ", kKomp1out=kKomp1Out[pG1,pG2, qG1,qG2,kIn],"  kKomp2out = ", kKomp2out=kKomp2Out[pG1,pG2, qG1,qG2,kIn]]
];
graphZerleg[pG1_,pG2_, qG1_,qG2_,kIn_]:= Show[Graphics[{PointSize[0.02], Point[pG1],Point[pG2],Point[qG1],Point[qG2],Point[pG1], Point[geradeSchnittOut[pG1,pG2, qG1,qG2]],
Line[{
pG1,pG2,
geradeSchnittOut[pG1,pG2, qG1,qG2], 
qG1,qG2,
geradeSchnittOut[pG1,pG2, qG1,qG2],
geradeSchnittOut[pG1,pG2, qG1,qG2]+kKomp1Out[pG1,pG2, qG1,qG2,kIn], 
geradeSchnittOut[pG1,pG2, qG1,qG2]+kKomp1Out[pG1,pG2, qG1,qG2,kIn]+kKomp2Out[pG1,pG2, qG1,qG2,kIn], 
geradeSchnittOut[pG1,pG2, qG1,qG2]+kKomp2Out[pG1,pG2, qG1,qG2,kIn], 
geradeSchnittOut[pG1,pG2, qG1,qG2]}],
Arrow[
geradeSchnittOut[pG1,pG2, qG1,qG2],
geradeSchnittOut[pG1,pG2, qG1,qG2]+kKomp1Out[pG1,pG2, qG1,qG2,kIn]],
Arrow[geradeSchnittOut[pG1,pG2, qG1,qG2],
geradeSchnittOut[pG1,pG2, qG1,qG2]+kIn],
Arrow[geradeSchnittOut[pG1,pG2, qG1,qG2],
geradeSchnittOut[pG1,pG2, qG1,qG2]+kKomp2Out[pG1,pG2, qG1,qG2,kIn]]}],notDisplay];

(*  3 *) 

vSenkrEben[v_]:={-v[[2]],v[[1]]};

kraftPunktZerlegSenkr[qG1_,pG1_,kIn_]:=Module[{λ,μ,pIntern},
solvZerleg=Flatten[Solve[richt[pG1,qG1] λ + richt[qG1,qG1+vSenkrEben[pG1-qG1]] μ == kIn, {λ,μ}]];
kKomp1Out[pG1,qG1,kIn] = richt[pG1,qG1] λ/. solvZerleg;
kKomp2Out[pG1,qG1,kIn] = richt[qG1,qG1+vSenkrEben[pG1-qG1]] μ/. solvZerleg;
Print["kKomp1out = ", kKomp1out=kKomp1Out[pG1,qG1,kIn],"  kKomp2out = ", kKomp2out=kKomp2Out[pG1,qG1,kIn]]
];

graphZerlegSenkr[qG1_,pG1_,kIn_]:= Show[Graphics[{PointSize[0.02], Point[pG1],Point[qG1],Point[qG1+vSenkrEben[pG1-qG1]],
Line[{
pG1,qG1,
qG1+vSenkrEben[pG1-qG1], 
qG1,
qG1+kKomp1Out[pG1,qG1,kIn], 
qG1+kKomp1Out[pG1,qG1,kIn]+kKomp2Out[pG1,qG1,kIn], 
qG1+kKomp2Out[pG1,qG1,kIn], 
qG1}],
Arrow[
qG1,qG1+kKomp1Out[pG1,qG1,kIn]],
Arrow[qG1,qG1+kIn],
Arrow[qG1,qG1+kKomp2Out[pG1,qG1,kIn]]}],notDisplay];

(*  4 *) 

showPoints[points_]:=Show[Graphics[{PointSize[0.02],Map[Point,points]}],notDisplay];
showLinesToPoints[LinesToPoints_]:=Show[Graphics[{Line[LinesToPoints]}],notDisplay];
showPointsLines[points_,LinesToPoints_]:=Show[Graphics[{PointSize[0.02],Map[Point,points],Line[LinesToPoints]}],notDisplay];

tabIn[x_,y__]:={x,y};
tabIn[{x_,y__}]:={x,y};
arrow[{p1_,p2_}]:=Arrow[p1,p2];
tabArrow[p1_,x_,y__]:=Table[arrow[{p1,p1+tabIn[{x,y}[[k]]]}],{k,1,Length[tabIn[x,y]]}];
tabArrow[{p1_,x_,y__}]:=tabArrow[p1,x,y];
tabP0Arrow[p0_,p1_,x_,y__]:=Join[{Point[p0]},tabArrow[p1,x,y]];
tabP0Arrow[{p0_,p1_,x_,y__}]:=tabP0Arrow[p0,p1,x,y];
showGraph[u_]:=Show[Graphics[u],notDisplay];

showArrow[p1_,p2_]:=showGraph[Arrow[p1,p2]];
showArrow[{p1_,p2_}]:=showGraph[Arrow[p1,p2]];
showTabArrow[p1_,x_,y__]:=showGraph[tabArrow[p1,x,y]];
showTabArrow[{p1_,x_,y__}]:=showGraph[tabArrow[p1,x,y]];
showTabP0Arrow[p0_,p1_,x_,y__]:=showGraph[Join[{PointSize[0.02],Point[p0]}, tabArrow[p1,x,y]]];
showTabP0Arrow[{p0_,p1_,x_,y__}]:=showTabP0Arrow[p0,p1,x,y];
showBigPoints[faktor_,points_]:=Show[Graphics[{PointSize[faktor 0.02], Map[Point,points]}],notDisplay];
showGroundLine[len_:0.2, p0_]:=Show[Graphics[{PointSize[0.02], Point[p0], Line[{p0-{len,0},p0+{len,0}}]}],notDisplay];

(*  5 *) 

moment[drehpunkt_,mengePunkte_,mengeKraft_]:=If[ Length[mengePunkte]==Length[mengeKraft],
Apply[Plus,Table[Det[{mengePunkte[[k]]-drehpunkt,mengeKraft[[k]]}],{k,1,Length[mengePunkte]}]],Print["Anzahl Kraftpunkte ungleich Anzahl Kräfte"]];

resultMomentKraftAbsolut[drehpunkt_,mengePunkte_,mengeKraft_,q_]:=moment[drehpunkt,mengePunkte,mengeKraft]/Norm[q-drehpunkt];

(*  6 *) 

Print["Kurze Erklärungen:"];
Print[" "];
Print["1. Berchnung der resultierenden Kraft zu zwei oder mehreren Kräften:"];

Print["kResultOut[6,7,3,4,5] gibt die Resultierende der aufgezählten skalaren Kräfte 6,7,3,4,5"];
Print["kResultOut[{{1,2},{1,3}}] gibt die Resultierende der aufgezählten vektoriellen Kräfte {1,2},{1,3}"];
Print["kResultOut[{{1,2},{1,3},{1,4},{1,5}}] gibt die Resultierende der aufgezählten vektoriellen Kräfte {1,2},{1,3},{1,4},{1,5}"];
Print["Apply[kResult,{{1,2},{1,3},{1,4},{1,5}}] gibt die Resultierende der aufgezählten vektoriellen Kräfte {1,2},{1,3},{1,4},{1,5}"];
Print["{{1,2},{1,3},{1,4},{1,5}}//kResultOut gibt die Resultierende der aufgezählten vektoriellen Kräfte {1,2},{1,3},{1,4},{1,5}"];
Print[" "];
Print["2a. Schnittpunktsberechnung zu zwei Wirkungslinien"];
Print[" "];
Print["p1={1,2};p2={1,3};q1={4,1};q2={4,4}; geradeSchnittOut[p1,p2,q1,q2] gibt den Schnittpunkt zu den Geraden p1,p2 und q1,q2 (hier leer)"];
Print["p1={1,2};p2={2,3};q1={4,1};q2={4,4};
geradeSchnittOut[p1,p2,q1,q2] gibt den Schnittpunkt zu den Geraden p1,p2 und q1,q2"];
Print[" "];
Print["2b. Komponentenzerlegung von Kräften und Plots"];
Print[" "];
Print["p1={1,2};p2={-1,3};q1={3,1};q2={6,4};kraft={4,-3};
kraftPunktZerleg[p1,p2,q1,q2,kraft];
s1=graphZerleg[p1,p2,q1,q2,kraft];  gibt die Komponentenzerlegung von kraft in Richtung p1,p2 und q1,q2 sowie einen Plot dazu"];
Print["p1={5,2};p2={2,3};q1={4,1};q2={4,4};kraft={3,5};
kraftPunktZerleg[p1,p2,q1,q2,kraft];
s2=graphZerleg[p1,p2,q1,q2,kraft];  gibt die Komponentenzerlegung von kraft in Richtung p1,p2 und q1,q2 sowie einen Plot dazu"];
Print["Show[s2,s1]; legt die obigen beiden Plots zusammen"];
Print[" "];
Print["3. Komponentenzerlegung einer Kraft in eine Richtungskraft und die Normalkraft mit Plot"];
Print[" "];
Print["p1={1,2};q1={3,1};kraft={4,-3};
kraftPunktZerlegSenkr[p1,q2,kraft];
graphZerlegSenkr[p1,q2,kraft];   gibt die Komponentenzerlegung von kraft in Richtung p1,p2 und in der dazu senkrechten Richtung sowie einen Plot dazu"];
Print[" "];
Print["4. Plots von Punkten, Linienzügen, Kräften"];
Print[" "];
Print["p1={1,2};p2={7,2};q1={3,1};
s3=showPointsLines[{p1,p2,q1,{5,6}}, {p1,p2,q1,{5,6},p1,q1}];
Show[s1,s2,s3];"];
Print["p1={1,2};p2={7,2};q1={3,1};
s3=showPointsLines[{p1,p2,q1,{5,6}}, {p1,p2,q1,{5,6},p1,q1}]; gibt einen Plot der Punkte p1,p2,q1,{5,6} und des Linienzuges p1,p2,q1,{5,6},p1,q1"];
Print["Show[s1,s2,s3]; legt die Plots s1,s2 und s3 übereinander"];
Print["p0={0,0}; p1={1,2}; p2={-1,3}; p3={4,1}; p4={2,3};
showArrow[p1,p2]; zeigt den Plot mit dem Pfeil (p0,p1)"];
Print["p0={0,0}; p1={1,2}; p2={-1,3}; p3={4,1}; p4={2,3};
showArrow[{p1,p2}]; zeigt ebenfalls den Plot mit dem Pfeil (p0,p1)"];
Print["p0={0,0}; p1={1,2}; p2={-1,3}; p3={4,1}; p4={2,3};
showTabArrow[p1,p2,p3,p4]; zeigt den Plot mit den Pfeilen (p0,p1), (p0,p2),...,(p0,p4) (Anzahl Pfeile beliebig)"];
Print["showTabArrow[{p1,p2,p3,p4}]; macht dasselbe wie showTabArrow[p1,p2,p3,p4]"];
Print["p0={0,0}; p1={1,2}; p2={-1,3}; p3={4,1}; p4={2,3};
showTabP0Arrow[p0,p1,p2,p3,p4]; zeigt den Punkt p0 sowie die Pfeile (p0,p1), (p0,p2),...,(p0,p4)"];
Print["showTabP0Arrow[{p0,p1,p2,p3,p4}]; macht dasselbe wie showTabP0Arrow[p0,p1,p2,p3,p4];"];
Print["showBigPoints[2,{p1,p2,p3,p4}]; zeigt die um den Faktor 2 vergrösserten Punkte p1, p2,..., p4"];
Print["showGroundLine[0.4,p0]; zeigt p0 mit einer horizontalen Linie der Länge 2 mal 0.4, beidseitig von p0. Die Länge hängt vom Massstab ab."];
Print["Show[showGroundLine[0.4,p0],showGroundLine[0.4,p1]]; zeigt zwei entsprechende Linien wie oben um p0 und um p1"];
Print["Show[showGroundLine[p0],showGroundLine[0.6,p1]]; zeigt eine Linie um p0 mit der Default-Länge 2 mal 0.2 und eine um p1 mit der Länge 2 mal 0.6"];
Print[" "];
Print["5. Momente und Normalkraft aus den Momenten
"];
Print["drehpunkt={-5,4}; p1={6,7}; p2={9,8}; p3={1,2}; q={4,6};
pkraft1={2,2}; pkraft2={4,2}; pkraft3={2,2};
mengePunkte={p1,p2,p3}; mengeKraft={pkraft1,pkraft2,pkraft3};  moment[drehpunkt,mengePunkte,mengeKraft] ergibt das totale Moment"];
Print["drehpunkt={-5,4}; p1={6,7}; p2={9,8}; p3={1,2}; q={4,6};
pkraft1={2,2}; pkraft2={4,2}; pkraft3={2,2};
mengePunkte={p1,p2,p3}; mengeKraft={pkraft1,pkraft2,pkraft3};  resultMomentKraftAbsolut[drehpunkt,mengePunkte,mengeKraft,q]  ergibt die in q wirkende Normalkraft für das Momentengleichgewicht bezüglich dem Drehpunkt"];
Print["drehpunkt={-5,4}; p1={6,7}; p2={9,8}; p3={1,2}; q={4,6};
pkraft1={2,2}; pkraft2={4,2}; pkraft3={2,2};
mengePunkte={p1,p2,p3}; mengeKraft={pkraft1,pkraft2,pkraft3};  resultMomentKraftAbsolut[drehpunkt,mengePunkte,mengeKraft,q]//N  ergibt die in q wirkende Normalkraft für das Momentengleichgewicht bezüglich dem Drehpunkt numerisch, falls die Eingaben exakt sind"];
Print["drehpunkt={-5,4}; p1={6,7}; p2={9,8}; p3={1,2}; q={4,6};
pkraft1={2,2}; pkraft2={4,2}; pkraft3={2,2};
mengePunkte={p1,p2,p3}; mengeKraft={pkraft1,pkraft2,pkraft3};  N[resultMomentKraftAbsolut[drehpunkt,mengePunkte,mengeKraft,q]] ergibt die in q wirkende Normalkraft für das Momentengleichgewicht bezüglich dem Drehpunkt numerisch, falls die Eingaben exakt sind"];
Print[" ''Moment =  '', moment[drehpunkt,mengePunkte,mengeKraft],   '',   Kraft =  '',resultMomentKraftAbsolut[drehpunkt,mengePunkte,mengeKraft,q] // N]  mit richtig gesetzten Anführungsstrichen (siehe Anwendung) ergibt eine Ausgabe mit Moment und Kraft"];
Print[""];
Print["6. Erklärungen: Als Output auf dem Schirm lesbar, wenn der Modul initiiert worden ist"];
];

Anwendung

Mit dem initiierten Modul arbeiten: Dieser Teil sollte im File StatikWork.nb behandelt werden. (Kann hier auch, doch besteht die Gefahr, dass aus Versehen Teile des Moduls gelöscht werden könnten.)

initStatik[1]