Chvění pružných tyčí

Následující aplet zobrazuje různé módy stojaného vlnění, které vznikají na tělesech ve tvaru tyčí upevněných:
	- na dvou koncích;
	- na jednom konci;
	- uprostřed.
Pomocí posuvníků lze měnit délku l zobrazené tyče a mód k stojatého vlnění (tj. základní frekvence, druhá harmonická, ...).
Volitelně lze zobrazit:
	- jeden, dva nebo všechny tři z výše zmíněných případů upevnění tělesa;
	- zobrazení žádného módu, aktuálního (tj. s právě nastaveným k) nebo všechny (tj. od prvního až po aktuálně nastavený mód);
	- polohu uzlů;
	- polohu kmiten;
	- vztah pro frekvenci aktuálního módu na zobrazených tělesech.

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, 2009

Příprava pro vykreslení grafu

ClearAll["Global`*"];
jmenosouboru="chveni_tyce_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
stredx=0.5(x2+x1);stredy=0.5(y2+y1);

l0=0.75(x2-x1);lmin=0.25(x2-x1);lmax=0.9(x2-x1);deltal=0.05(x2-x1);
k0=1;kmin=1;kmax=6;deltak=1;

mezeray=((y2-y1)/6);
ymax=0.75 mezeray;
sirka=0.015(y2-y1);
sirkaupevneni=1.25sirka;
delkaupevneni=6sirka;

tloustka=0.005;
velikostbodu=0.02;
velikostpisma=18;

barva=Black;
barvatyce=Lighter[Gray,0.5];
barvaupevneni=Gray;
barvamodu={Red,Blue,Darker[Green],Orange,Brown,Darker[Cyan]};
barvauzlu=Magenta;
barvakmitny=Blend[{Cyan,Blue}];

ChveniTyce=Manipulate[Deploy[
tyc1=Rectangle[{stredx-0.5l,stredy+2mezeray-0.5sirka},{stredx+0.5l,stredy+2mezeray+0.5sirka}];
tyc2=Rectangle[{stredx-0.5l,stredy-0.5sirka},{stredx+0.5l,stredy+0.5sirka}];
tyc3=Rectangle[{stredx-0.5l,stredy-2mezeray-0.5sirka},{stredx+0.5l,stredy-2mezeray+0.5sirka}];
upevneni11=Rectangle[{stredx-0.5l-0.5sirkaupevneni,stredy+2mezeray-0.5delkaupevneni},{stredx-0.5l+0.5sirkaupevneni,stredy+2mezeray+0.5delkaupevneni}];
upevneni12=Rectangle[{stredx+0.5l-0.5sirkaupevneni,stredy+2mezeray-0.5delkaupevneni},{stredx+0.5l+0.5sirkaupevneni,stredy+2mezeray+0.5delkaupevneni}];
upevneni2=Rectangle[{stredx-0.5l-0.5sirkaupevneni,stredy-0.5delkaupevneni},{stredx-0.5l+0.5sirkaupevneni,stredy+0.5delkaupevneni}];
upevneni3=Rectangle[{stredx-0.5sirkaupevneni,stredy-2mezeray-0.5delkaupevneni},{stredx+0.5sirkaupevneni,stredy-2mezeray+0.5delkaupevneni}];
uzel1=Table[
Point[{stredx-0.5l+(l/k)i,stredy+2mezeray}],
{i,0,k,1}];
uzel2=Table[
Point[{stredx-0.5l+((2l)/(2k-1))i,stredy}],
{i,0,k-1,1}];
uzel3=Table[
Point[{stredx-((k-1)/(2k-1))l+(l/(2k-1))i,stredy-2mezeray}],
{i,0,2k-2,1}];
kmitna1=Table[
Point[{stredx-(((k-1)l)/(2k))+(l/k)i,stredy+2mezeray}],
{i,0,k-1,1}];
kmitna2=Table[
Point[{stredx+0.5l-((2l)/(2k-1))i,stredy}],
{i,0,k-1,1}];
kmitna3=Table[
Point[{stredx+0.5l-(l/(2k-1))i,stredy-2mezeray}],
{i,0,2k-1,1}];

pisvzorec1=StringJoin[ToString[Style[ToString[Subscript["f",ToString[Style[ToString[k],barvamodu[[k]]],StandardForm]],StandardForm],barva],StandardForm]," = ",ToString[Style[ToString[k],barvamodu[[k]]],StandardForm],"(v/(2l))"];
pisvzorec2=StringJoin[ToString[Style[ToString[Subscript["f",ToString[Style[ToString[2k-1],barvamodu[[k]]],StandardForm]],StandardForm],barva],StandardForm]," = ",ToString[Style[ToString[2k-1],barvamodu[[k]]],StandardForm],"(v/(4l))"];
pisvzorec3=StringJoin[ToString[Style[ToString[Subscript["f",ToString[Style[ToString[2k-1],barvamodu[[k]]],StandardForm]],StandardForm],barva],StandardForm]," = ",ToString[Style[ToString[2k-1],barvamodu[[k]]],StandardForm],"(v/(2l))"];

grafik=Show[
Graphics[{
If[zobrazittyc1,
{barvatyce,tyc1},
Text[""]],
If[zobrazittyc2,
{barvatyce,tyc2},
Text[""]],
If[zobrazittyc3,
{barvatyce,tyc3},
Text[""]]
}],

If[zobrazittyc1&&zobrazitmod≠"žádný",
If[zobrazitmod=="aktuální",
Plot[{ymax Sin[π((x-stredx+0.5l)/l)k]+2mezeray,-ymax Sin[π((x-stredx+0.5l)/l)k]+2mezeray},{x,stredx-0.5l,stredx+0.5l},PlotStyle->{{barvamodu[[k]],Thickness[tloustka]},{barvamodu[[k]],Dashed,Thickness[tloustka]}}],
Table[
Plot[{ymax Sin[π((x-stredx+0.5l)/l)i]+2mezeray,-ymax Sin[π((x-stredx+0.5l)/l)i]+2mezeray},{x,stredx-0.5l,stredx+0.5l},PlotStyle->{{barvamodu[[i]],Thickness[tloustka]},{barvamodu[[i]],Dashed,Thickness[tloustka]}}],
{i,1,k,1}]],
Plot[0,{x,stredx-0.005,stredx},PlotStyle->{barvatyce,Thickness[0.001tloustka]}]],
If[zobrazittyc2&&zobrazitmod≠"žádný",
If[zobrazitmod=="aktuální",
Plot[{ymax Sin[π((x-stredx+0.5l)/(2l))(2k-1)],-ymax Sin[π((x-stredx+0.5l)/(2l))(2k-1)]},{x,stredx-0.5l,stredx+0.5l},PlotStyle->{{barvamodu[[k]],Thickness[tloustka]},{barvamodu[[k]],Dashed,Thickness[tloustka]}}],
Table[
Plot[{ymax Sin[π((x-stredx+0.5l)/(2l))(2i-1)],-ymax Sin[π((x-stredx+0.5l)/(2l))(2i-1)]},{x,stredx-0.5l,stredx+0.5l},PlotStyle->{{barvamodu[[i]],Thickness[tloustka]},{barvamodu[[i]],Dashed,Thickness[tloustka]}}],
{i,1,k,1}]],
Plot[0,{x,stredx-0.005,stredx},PlotStyle->{barvatyce,Thickness[0.001tloustka]}]],
If[zobrazittyc3&&zobrazitmod≠"žádný",
If[zobrazitmod=="aktuální",
Plot[{ymax Cos[π((x-stredx+0.5l)/l)(2k-1)]-2mezeray,-ymax Cos[π((x-stredx+0.5l)/l)(2k-1)]-2mezeray},{x,stredx-0.5l,stredx+0.5l},PlotStyle->{{barvamodu[[k]],Thickness[tloustka]},{barvamodu[[k]],Dashed,Thickness[tloustka]}}],
Table[
Plot[{ymax Cos[π((x-stredx+0.5l)/l)(2i-1)]-2mezeray,-ymax Cos[π((x-stredx+0.5l)/l)(2i-1)]-2mezeray},{x,stredx-0.5l,stredx+0.5l},PlotStyle->{{barvamodu[[i]],Thickness[tloustka]},{barvamodu[[i]],Dashed,Thickness[tloustka]}}],
{i,1,k,1}]],
Plot[0,{x,stredx-0.005,stredx},PlotStyle->{barvatyce,Thickness[0.001tloustka]}]],

Graphics[{
If[zobrazittyc1,
{{barvaupevneni,upevneni11},
{barvaupevneni,upevneni12},
If[zobrazituzly&&zobrazitmod≠"žádný"&&zobrazitmod≠"všechny",
{barvauzlu,PointSize[velikostbodu],uzel1},
Text[""]],
If[zobrazitkmitny&&zobrazitmod≠"žádný"&&zobrazitmod≠"všechny",
{barvakmitny,PointSize[velikostbodu],kmitna1},
Text[""]]},
Text[""]],
If[zobrazittyc2,
{{barvaupevneni,upevneni2},
If[zobrazituzly&&zobrazitmod≠"žádný"&&zobrazitmod≠"všechny",
{barvauzlu,PointSize[velikostbodu],uzel2},
Text[""]],
If[zobrazitkmitny&&zobrazitmod≠"žádný"&&zobrazitmod≠"všechny",
{barvakmitny,PointSize[velikostbodu],kmitna2},
Text[""]]},
Text[""]],
If[zobrazittyc3,
{{barvaupevneni,upevneni3},
If[zobrazituzly&&zobrazitmod≠"žádný"&&zobrazitmod≠"všechny",
{barvauzlu,PointSize[velikostbodu],uzel3},
Text[""]],
If[zobrazitkmitny&&zobrazitmod≠"žádný"&&zobrazitmod≠"všechny",
{barvakmitny,PointSize[velikostbodu],kmitna3},
Text[""]]},
Text[""]]
}],

FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},Axes->False,ImageSize->500
]],

{{l,l0,Style["l",15,barva,Italic]},lmin,lmax,deltal},
{{k,k0,Style["k",15,barva,Italic]},kmin,kmax,deltak},
Delimiter,
Item[Style["Zobrazit tyč upevněnou:",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazittyc1,True,Style["- na 2 koncích",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazittyc2,True,Style["- na 1 konci",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazittyc3,True,Style["- uprostřed",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitmod,"aktuální",Style["- módy",15,barva,FontFamily->Times]},{"žádný","aktuální","všechny"},ControlType->RadioButton},
{{zobrazituzly,False,Style["- uzly",15,barvauzlu,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitkmitny,False,Style["- kmitny",15,barvakmitny,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvzorec,False,Style["- vztah",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazittyc1&&zobrazitvzorec&&zobrazitmod=="aktuální",
Item[Style[pisvzorec1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazittyc2&&zobrazitvzorec&&zobrazitmod=="aktuální",
Item[Style[pisvzorec2,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazittyc3&&zobrazitvzorec&&zobrazitmod=="aktuální",
Item[Style[pisvzorec3,velikostpisma,barva,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, 2009",10,Black,FontFamily->Times],"",Style["Chvění pružných tyčí",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.

ChveniTyce