Srážky těles

Následující interaktivní notebook umožňuje názorně pochopit přímé centrální srážky těles. Pomocí posuvníků lze nastavit hmotnosti a velikosti rychlostí obou kulových těles, která se mají srazit. Dále je možné vybrat typ srážky: pružná nebo nepružná.
Poznámka: Změna hmotnosti obou koulí je znázorněna graficky změnou barvy koulí, aby bylo i kvalitativně vidět, že se hmotnosti mění.

Posuvníkem t lze pak pohybovat oběma tělesy.

Volitelně lze zobrazit:
	vektory rychlostí u zobrazených těles ve tvaru koulí;
	hodnoty zadané na vstupu pomocí posuvníků;
	hodnoty velikostí rychlostí těles po srážce, které notebook vypočítá;
	velikosti hybností obou těles a jejich součty před srážkou a po srážce.
	
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, 2010

Příprava pro vykreslení grafu

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

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

m10=1;m1min=0.1;m1max=10;deltam1=0.1;
m20=1;m2min=0.1;m2max=10;deltam2=0.1;
v10=1;v1min=-5;v1max=5;deltav1=0.1;
v20=1;v2min=-5;v2max=5;deltav2=0.1;
t0=0;tmin=0;tmax=5;deltat=0.001;

tloustka=0.005;
velikostbodu=0.02;
velikostsipky=0.04;
velikostpisma=18;
polomer0=1.25;
koeficientpolomeru=2;

poloha1x=0.25x1;
poloha1y=0.5y2;
poloha2x=0.25x2;
poloha2y=0.5y2;

barva=Black;
barvavarovani=Magenta;
barva1=Blue;
barva2=Red;
barvakoule1=Lighter[barva1,0.6];
barvakoule2=Lighter[barva2,0.6];
barvahybnost=Orange;

polomer1=polomer0;
polomer2=polomer0;

Srazky=Manipulate[Deploy[
koefbarvy=0.9(1-((m1-m1min)/(m1max-m1min)));
barvakoule1=Lighter[barva1,0.9(1-((m1-m1min)/(m1max-m1min)))];
barvakoule2=Lighter[barva2,0.9(1-((m2-m1min)/(m1max-m1min)))];
(*polomer1=polomer0+((m1-m1min)/(m1max-m1min))polomer0 koeficientpolomeru;
polomer2=polomer0+((m2-m2min)/(m2max-m2min))polomer0 koeficientpolomeru;*)
reseni=Solve[poloha1x+tpom v1+polomer1==poloha2x+tpom v2-polomer2,tpom];
If[reseni≠{},
{tkolize=Round[tpom/.reseni[[1]],0.01],
If[tkolize<0,
{kolize=False,
tkolize=0},
kolize=True]},
{tkolize=0,(*Pomocná hodnota, nemá vliv na další výpočet.*)
kolize=False}];
If[typsrazky==" pružná ",
{zzh=m1 v1+m2 v2==m1 v1novapom+m2 v2novapom;
zze=(1/2)m1 (v1^2)+(1/2)m2 (v2^2)==(1/2)m1 (v1novapom^2)+(1/2)m2 (v2novapom^2);
reseninovev=Solve[{zzh,zze},{v1novapom,v2novapom}]},
{zzh=m1 v1+m2 v2==(m1+m2 )v1novapom;
reseninovev=Solve[zzh,v1novapom]}];
If[reseninovev≠{} ,
{v1nova=v1novapom/.reseninovev[[1,1]],
If[NumericQ[v1nova],
If[Im[v1nova]==0,
{If[typsrazky==" pružná ",
v2nova=v2novapom/.reseninovev[[1,2]],
v2nova=v1nova],
noverychlosti=True},
noverychlosti=False],
noverychlosti=False]},
noverychlosti=False];
If[kolize==False ∨(kolize∧t≤tkolize),
{rychlost1=v1,
rychlost2=v2,
opravapolohy1x=0,
opravapolohy2x=0,
tstart=0},
""];
If[kolize∧noverychlosti∧t>tkolize,
{rychlost1=v1nova,
rychlost2=v2nova,
tstart=tkolize,
opravapolohy1x=tkolize v1-(tkolize-tstart) v1nova,
opravapolohy2x=tkolize v2-(tkolize-tstart) v2nova},
""];
teleso11=Disk[{poloha1x+opravapolohy1x+(t-tstart) rychlost1,poloha1y},polomer1];
teleso12=Circle[{poloha1x+opravapolohy1x+(t-tstart)rychlost1,poloha1y},polomer1];
teleso21=Disk[{poloha2x+opravapolohy2x+(t-tstart)rychlost2,poloha2y},polomer2];
teleso22=Circle[{poloha2x+opravapolohy2x+(t-tstart) rychlost2,poloha2y},polomer2];
vektorv1={
Arrowheads[{0,velikostsipky}],
Arrow[{{poloha1x+opravapolohy1x+(t-tstart)rychlost1,poloha1y},{poloha1x+opravapolohy1x+(t-tstart)rychlost1+rychlost1,poloha1y}}]};
vektorv2={
Arrowheads[{0,velikostsipky}],
Arrow[{{poloha2x+opravapolohy2x+(t-tstart)rychlost2,poloha2y},{poloha2x+opravapolohy2x+(t-tstart) rychlost2+rychlost2,poloha2y}}]};

grafik=Show[
Graphics[{
{barvakoule1,teleso11},
{barva,Thickness[0.75tloustka],teleso12},
{barvakoule2,teleso21},
{barva,Thickness[0.75tloustka],teleso22},
If[zobrazitrychlosti,
{{barva,Thickness[2.2tloustka],vektorv1},
{barva1,Thickness[1.25tloustka],vektorv1},
{barva,Thickness[2.2tloustka],vektorv2},
{barva2,Thickness[1.25tloustka],vektorv2}},
Text[""]],
If[zobrazithodnoty,
{Text[Style[StringJoin[ToString[Style["(Subscript[m, 1])",barva1],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[m1],barva1],StandardForm],ToString[Style[" kg",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{x1,0.2y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[v, 1])",barva1],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[v1],barva1],StandardForm],ToString[Style[" m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{x1,0.35y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[m, 2])",barva2],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[m2],barva2],StandardForm],ToString[Style[" kg",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{0.3x2,0.2y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[v, 2])",barva2],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[v2],barva2],StandardForm],ToString[Style[" m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{0.3x2,0.35y1},{Left,Center}],
If[zobrazitvypoctenehodnoty,
If[kolize,
{Text[Style["________________",velikostpisma,barva,FontFamily->Times],{x1,0.4y1},{Left,Center}],
Text[Style["________________",velikostpisma,barva,FontFamily->Times],{0.3x2,0.4y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[v, 1nová])",barva1],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[v1nova,0.1]],barva1],StandardForm],ToString[Style[" m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{x1,0.5y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[v, 2nová])",barva2],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[v2nova,0.1]],barva2],StandardForm],ToString[Style[" m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{0.3x2,0.5y1},{Left,Center}]},
Text[Style["Tělesa se nesrazí!",1.2velikostpisma,barvavarovani,FontFamily->Times],{stredx,0.9y2},{Center,Center}]],
Text[""]],
If[zobrazithybnosti,
{Text[Style[StringJoin[ToString[Style["(Subscript[p, 1před])",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[m1 v1,0.01]],barva],StandardForm],ToString[Style[" kg.m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{x1,0.65y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[p, 2před])",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[m2 v2,0.01]],barva],StandardForm],ToString[Style[" kg.m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{0.3x2,0.65y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[p, před])",barvahybnost],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[m1 v1+m2 v2,0.01]],barvahybnost],StandardForm],ToString[Style[" kg.m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{x1,0.95y1},{Left,Center}],
If[kolize,
{Text[Style[StringJoin[ToString[Style["(Subscript[p, 1po])",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[m1 v1nova,0.01]],barva],StandardForm],ToString[Style[" kg.m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{x1,0.8y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[p, 2po])",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[m2 v2nova,0.01]],barva],StandardForm],ToString[Style[" kg.m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{0.3x2,0.8y1},{Left,Center}],
Text[Style[StringJoin[ToString[Style["(Subscript[p, po])",barvahybnost],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[m1 v1nova+m2 v2nova,0.01]],barvahybnost],StandardForm],ToString[Style[" kg.m.(s^(-1))",barva],StandardForm]],velikostpisma,barva,FontFamily->Times],{0.3x2,0.95y1},{Left,Center}]},
Text[""]]},
Text[""]]},
Text[""]]}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->500
]],

{{m1,m10,Style["(Subscript[m, 1])",15,barva1]},m1min,m1max,deltam1},
{{v1,v10,Style["(Subscript[v, 1])",15,barva1]},v1min,v1max,deltav1},
Delimiter,
{{m2,m20,Style["(Subscript[m, 2])",15,barva2]},m2min,m2max,deltam2},
{{v2,v20,Style["(Subscript[v, 2])",15,barva2]},v2min,v2max,deltav2},
Delimiter,
{{typsrazky," pružná ",Style["typ srážky",15,barva,FontFamily->Times]},{" pružná "," nepružná "}},
Delimiter,
{{t,t0,Style["t",15,barva]},tmin,tmax,deltat},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitrychlosti,True,Style["- vektory rychlostí",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazithodnoty,True,Style["- hodnoty dané",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvypoctenehodnoty,True,Style["- hodnoty nové",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazithybnosti,True,Style["- hybnosti",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
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, 2010",10,Black,FontFamily->Times],"",Style["Srážky těles",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.

Srazky