Skládání různoběžných sil se společným působištěm v rovině

Následující aplet umožňuje názorně pochopit skládání různoběžných sil v rovině. Síly mají společné působiště, které je umístěno v počátku kartézské soustavy souřadnic.
Pomocí posuvníku lze nastavit počet skládaných sil. Velikosti a směry jednotlivých sil lze měnit pomocí levého tlačítka myši, kterým "uchopíte" koncový bod síly a "potáhnete" na nové místo. Během přesunu se přepočítávají všechny informace o silách a (je-li příslušná možnost zvolena zaškrtávacím tlačítkem) průběžně se zobrazují.

Tlačítkem Ulož obrázek se uloží právě zobrazené "bílé" okno do aktuální složky (složka, v níž je uložen tento notebook) pod jménem, které je uloženo v proměnné jmenosouboru. K tomuto jménu souboru je při opakovaném ukládání grafu přidáváno pořadové číslo.
Pozor! Při každém spuštění tohoto apletu se začínají soubory číslovat opět od jedné! Tak může dojít k přepsání minule uložených obrázků.

© Jaroslav Reichl, 2008

Příprava pro vykreslení grafu

jmenosouboru="ruznobezne_sily_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
stredx=((x1+x2)/2);stredy=((y1+y2)/2);
deltax=1;deltay=1;

pocatecnipocetsil=2;minpocetsil=1;maxpocetsil=5;

tloustka=0.005;
velikostbodu=0.001;
velikostpisma=15;

barva=Black;
barvasily={Red,Blue,Darker[Green],Orange,Brown};
barvakonce=barvasily;
barvavyslednice=Magenta;

osax={Arrowheads[{0,0.03}],Arrow[{{x1,stredy},{x2,stredy}}]};
osay={Arrowheads[{0,0.03}],Arrow[{{stredx,y1},{stredx,y2}}]};

RuznobezneSily=Manipulate[Deploy[
body=PadRight[body,pocetsil+1,RandomReal[{x1,x2},{pocetsil+1,2}]];
velikostsily=Table[(Sqrt[((body[[i,1]])^2)+((body[[i,2]])^2)]),{i,2,pocetsil+1,1}];
alfa=Table[If[body[[i,2]]≥0,
ArcCos[((body[[i,1]])/(Sqrt[((body[[i,1]])^2)+((body[[i,2]])^2)]))],
2π-ArcCos[((body[[i,1]])/(Sqrt[((body[[i,1]])^2)+((body[[i,2]])^2)]))]],{i,2,pocetsil+1,1}];
vyslednicex=(∑_(i=2)^(pocetsil+1))body[[i,1]];
vyslednicey=(∑_(i=2)^(pocetsil+1))body[[i,2]];
velikostvyslednice=(Sqrt[(vyslednicex^2)+(vyslednicey^2)]);
alfavyslednice=ArcCos[(vyslednicex/velikostvyslednice)];
If[vyslednicey<0,
alfavyslednice=2π-alfavyslednice,
""];
Fvyslednice={Arrowheads[{0,0.06}],Arrow[{{stredx,stredy},{vyslednicex,vyslednicey}}]};
If[zobrazitvelikostislozek&&zobrazitrozklad,
{pisvelikostsily=Table[StringJoin[ToString[Style[Subscript["F",ToString[i-1]],barvasily[[i-1]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[velikostsily[[i-1]],0.01]],barvasily[[i-1]]],StandardForm],ToString[Style[" N; ",barva],StandardForm],ToString[Style[Subscript["F",StringJoin[ToString[i-1],"x"]],barvasily[[i-1]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Abs[body[[i,1]]],0.01]],barvasily[[i-1]]],StandardForm],ToString[Style[" N; ",barva],StandardForm],ToString[Style[Subscript["F",StringJoin[ToString[i-1],"y"]],barvasily[[i-1]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Abs[body[[i,2]]],0.01]],barvasily[[i-1]]],StandardForm],ToString[Style[" N",barva],StandardForm]],
{i,2,pocetsil+1,1}],
pisvelikostvyslednice=StringJoin[ToString[Style["F",barvavyslednice],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[velikostvyslednice,0.01]],barvavyslednice],StandardForm],ToString[Style[" N; ",barva],StandardForm],ToString[Style[Subscript["F","x"],barvavyslednice],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Abs[vyslednicex],0.01]],barvavyslednice],StandardForm],ToString[Style[" N; ",barva],StandardForm],ToString[Style[Subscript["F","y"],barvavyslednice],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Abs[vyslednicey],0.01]],barvavyslednice],StandardForm],ToString[Style[" N",barva],StandardForm]]},
{pisvelikostsily=Table[StringJoin[ToString[Style[Subscript["F",ToString[i-1]],barvasily[[i-1]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[velikostsily[[i-1]],0.01]],barvasily[[i-1]]],StandardForm],ToString[Style[" N",barva],StandardForm]],{i,2,pocetsil+1,1}],
pisvelikostvyslednice=StringJoin[ToString[Style["F",barvavyslednice],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[velikostvyslednice,0.01]],barvavyslednice],StandardForm],ToString[Style[" N",barva],StandardForm]]}];
pisuhel=Table[StringJoin[ToString[Style[Subscript["α",ToString[i-1]],barvasily[[i-1]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180alfa[[i-1]])/π),0.01]],barvasily[[i-1]]],StandardForm],ToString[Style["°",barva],StandardForm]],{i,2,pocetsil+1,1}];
pisuhelvyslednice=StringJoin[ToString[Style["α",barvavyslednice],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180alfavyslednice)/π),0.01]],barvavyslednice],StandardForm],ToString[Style["°",barva],StandardForm]];

grafik=Show[
Graphics[{
{barva,Thickness[0.5tloustka],osax},
{barva,Thickness[0.5tloustka],osay},
Text[Style["x",15,barva,FontFamily->Times,Italic],{x2,stredy},{Center,Top}],
Text[Style["y",15,barva,FontFamily->Times,Italic],{stredx,y2},{Right,Center}],
Table[{barvakonce[[i-1]],PointSize[velikostbodu],Point[body[[i]]]},{i,2,pocetsil+1}],
Table[{barvasily[[i-1]],Thickness[1.2tloustka],{Arrowheads[{0,0.04}],Arrow[{{stredx,stredy},{body[[i,1]],body[[i,2]]}}]}},{i,2,pocetsil+1}],
If[zobrazitrozklad,
{Table[{barvasily[[i-1]],Dashed,Thickness[0.9tloustka],{Arrowheads[{0,0.025}],Arrow[{{stredx,stredy},{body[[i,1]] ,stredy}}]}},{i,2,pocetsil+1}],
Table[{barvasily[[i-1]],Dashed,Thickness[0.9tloustka],{Arrowheads[{0,0.025}],Arrow[{{stredx,stredy},{stredx ,body[[i,2]]}}]}},{i,2,pocetsil+1}],
{barvavyslednice,Dashed,Thickness[0.9tloustka],{Arrowheads[{0,0.025}],Arrow[{{stredx,stredy},{vyslednicex ,stredy}}]}},
{barvavyslednice,Dashed,Thickness[0.9tloustka],{Arrowheads[{0,0.025}],Arrow[{{stredx,stredy},{stredx,vyslednicey}}]}},
If[zobrazitrovnobeznik,
{Table[{Lighter[barvasily[[i-1]]],Dashed,Thickness[0.5tloustka],Line[{{stredx ,body[[i,2]]},{body[[i,1]],body[[i,2]]},{body[[i,1]],stredy}}]},{i,2,pocetsil+1}],
{barvavyslednice,Dashed,Thickness[0.5tloustka],Line[{{stredx,vyslednicey},{vyslednicex,vyslednicey},{vyslednicex ,stredy}}]}},
Text[""]]},
Text[""]],
If[popsat,
Table[Text[Style[Subscript["(Overscript[F, ⟶])",ToString[i-1]],18,barvasily[[i-1]],FontFamily->Times],{1.1body[[i,1]],1.1body[[i,2]]},{Center,Center}],{i,2,pocetsil+1,1}],
Text[""]],
If[zobrazitvyslednici,
{{barvavyslednice,Thickness[2tloustka],Fvyslednice},
If[popsat,
Text[Style["(Overscript[F, ⟶])",18,barvavyslednice,FontFamily->Times],{1.1vyslednicex,1.1vyslednicey},{Center,Center}],
Text[""]]},
Text[""]]}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1-deltax,x2+deltax},{y1-deltay,y2+deltay}},ImageSize->500
]],

{{pocetsil,pocatecnipocetsil,Style["počet sil",15,barva,FontFamily->Times]},minpocetsil,maxpocetsil,1},
{{body,{{0,0}}},Locator,Appearance->""},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitrozklad,False,Style["rozklad sil",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitrovnobeznik,False,Style["rovnoběžník sil",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvyslednici,True,Style["výslednici",15,barvavyslednice,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{popsat,True,Style["popis",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvelikosti,True,Style["velikosti sil",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvelikostislozek,False,Style["velikosti složek",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitvelikosti,
Item[Style[pisvelikostsily[[1]],velikostpisma,barvasily[[1]],FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvelikosti,
Item[Style[pisuhel[[1]],velikostpisma,barvasily[[1]],FontFamily->Times],Alignment->Left],
""]},
{Item[Style["",10,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitvelikosti&&pocetsil≥2,
Item[Style[pisvelikostsily[[2]],velikostpisma,barvasily[[2]],FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvelikosti&&pocetsil≥2,
Item[Style[pisuhel[[2]],velikostpisma,barvasily[[2]],FontFamily->Times],Alignment->Left],
""]},
{Item[Style["",10,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitvelikosti&&pocetsil≥3,
Item[Style[pisvelikostsily[[3]],velikostpisma,barvasily[[3]],FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvelikosti&&pocetsil≥3,
Item[Style[pisuhel[[3]],velikostpisma,barvasily[[3]],FontFamily->Times],Alignment->Left],
""]},
{Item[Style["",10,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitvelikosti&&pocetsil≥4,
Item[Style[pisvelikostsily[[4]],velikostpisma,barvasily[[4]],FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvelikosti&&pocetsil≥4,
Item[Style[pisuhel[[4]],velikostpisma,barvasily[[4]],FontFamily->Times],Alignment->Left],
""]},
{Item[Style["",10,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitvelikosti&&pocetsil≥5,
Item[Style[pisvelikostsily[[5]],velikostpisma,barvasily[[5]],FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvelikosti&&pocetsil≥5,
Item[Style[pisuhel[[5]],velikostpisma,barvasily[[5]],FontFamily->Times],Alignment->Left],
""]},
{Item[Style["",15,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitvelikosti&&zobrazitvyslednici,
Item[Style[pisvelikostvyslednice,velikostpisma,barvavyslednice,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvelikosti&&zobrazitvyslednici,
Item[Style[pisuhelvyslednice,velikostpisma,barvavyslednice,FontFamily->Times],Alignment->Left],
""]}
}]],
Delimiter,
Button[" Ulož obrázek ",{pocetulozeni=pocetulozeni+1,Export[StringInsert[StringJoin[cesta,jmenosouboru],ToString[pocetulozeni],-5],grafik]},ImageSize->{100,Automatic}],
ControlPlacement->Left,FrameLabel->{Style["© Jaroslav Reichl, 2008",10,Black,FontFamily->Times],"",Style["Skládání různoběžných sil se společným působištěm v rovině",25,Black,FontFamily->Times],""}];

Spuštění animace
Zpracujte běžným způsobem následující buňku a na dotaz, který se objeví, odpovězte ANO.

RuznobezneSily