Skládání rovnoběžných sil v rovině

Následující aplet umožňuje názorně pochopit skládání rovnoběžných sil v rovině. Síly mají své působiště na tělese ve tvaru tyče.
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="rovnobezne_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;
barvaosa=Lighter[Black];
barvatelesa=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[{{x1+deltax,y1},{x1+deltax,y2}}]};
teleso=Line[{{x1+deltax,stredy},{x2-deltax,stredy}}];
telesopom=Line[{{x1-deltax,stredy},{x2+deltax,stredy}}];

RovnobezneSily=Manipulate[Deploy[
chyba=False;
Fkoncovy=PadRight[Fkoncovy,pocetsil+1,RandomReal[{x1+deltax,x2-deltax},{pocetsil+1,2}]];
Fpocatecni=Table[{Fkoncovy[[i,1]],stredy},{i,1,pocetsil+1}];
Fvektor=Fkoncovy-Fpocatecni;
velikostsily=Table[(Sqrt[((Fvektor[[i,1]])^2)+((Fvektor[[i,2]])^2)]),{i,2,pocetsil+1,1}];
vzdalenost=Table[Fkoncovy[[i,1]]-(x1+deltax),{i,2,pocetsil+1}];
velikostvyslednice=(∑_(i=2)^(pocetsil+1))Fvektor[[i,2]];
If[velikostvyslednice≠0,
vzdalenostvyslednice=x1+deltax+(1/velikostvyslednice)(∑_(i=2)^(pocetsil+1))(Fvektor[[i,2]] vzdalenost[[i-1]]),
chyba=True];
Fvyslednice={Arrowheads[{0,0.06}],Arrow[{{vzdalenostvyslednice,stredy},{vzdalenostvyslednice,velikostvyslednice}}]};

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[Abs[velikostvyslednice],0.01]],barvavyslednice],StandardForm],ToString[Style[" N",barva],StandardForm]];
pisvzdalenost=Table[StringJoin[ToString[Style[Subscript["x",ToString[i-1]],barvasily[[i-1]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[vzdalenost[[i-1]],0.01]],barvasily[[i-1]]],StandardForm],ToString[Style[" m",barva],StandardForm]],{i,2,pocetsil+1,1}];
pisvzdalenostvyslednice=StringJoin[ToString[Style["x",barvavyslednice],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[vzdalenostvyslednice+x2-deltax,0.01]],barvavyslednice],StandardForm],ToString[Style[" m",barva],StandardForm]];

grafik=Show[
Graphics[{
If[zobrazitosy,
{{barvaosa,Thickness[0.5tloustka],osax},
{barvaosa,Thickness[0.5tloustka],osay},
Text[Style["x",15,barva,FontFamily->Times,Italic],{x2,stredy},{Center,Top}],
Text[Style["y",15,barva,FontFamily->Times,Italic],{x1+deltax,y2},{Right,Center}]},
Text[""]],
{barvatelesa,Dotted,Thickness[0.5tloustka],telesopom},
{barvatelesa,Thickness[2.5tloustka],teleso},
Table[{barvasily[[i-1]],Thickness[1.2tloustka],{Arrowheads[{0,0.04}],Arrow[{{Fpocatecni[[i,1]],Fpocatecni[[i,2]]},{Fkoncovy[[i,1]],Fkoncovy[[i,2]]}}]}},{i,2,pocetsil+1}],
If[popsat,
Table[Text[Style[Subscript["(Overscript[F, ⟶])",ToString[i-1]],18,barvasily[[i-1]],FontFamily->Times],{Fkoncovy[[i,1]]+0.015(x2-x1),0.5Fkoncovy[[i,2]]},{Left,Center}],{i,2,pocetsil+1,1}],
Text[""]],
If[chyba==False,
If[zobrazitvyslednici,
{{barvavyslednice,Thickness[2tloustka],Fvyslednice},
If[popsat,
Text[Style["(Overscript[F, ⟶])",18,barvavyslednice,FontFamily->Times],{vzdalenostvyslednice+0.02(x2-x1),0.5velikostvyslednice},{Left,Center}],
Text[""]]},
Text[""]],
Text[Style["Zadané síly nemají výslednici!",25,barvavyslednice,FontFamily->Times],{stredx,0.5y1},{Center,Center}]]
}],
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},
{{Fkoncovy,{{0,0}}},Locator,Appearance->""},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitosy,False,Style["osy",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},
{{zobrazitvzdalenosti,True,Style["vzdálenosti sil",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[zobrazitvzdalenosti,
Item[Style[pisvzdalenost[[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[zobrazitvzdalenosti&&pocetsil≥2,
Item[Style[pisvzdalenost[[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[zobrazitvzdalenosti&&pocetsil≥3,
Item[Style[pisvzdalenost[[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[zobrazitvzdalenosti&&pocetsil≥4,
Item[Style[pisvzdalenost[[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[zobrazitvzdalenosti&&pocetsil≥5,
Item[Style[pisvzdalenost[[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[zobrazitvzdalenosti&&zobrazitvyslednici,
Item[Style[pisvzdalenostvyslednice,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í rovnoběžných sil 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.

RovnobezneSily