Parabola a přímka

Následující interaktivní notebook umožňuje názorně pochopit vzájemnou polohu paraboly a přímky.
Pomocí posuvníků lze měnit:
	souřadnice vrcholu paraboly;
	parametr paraboly;
	koeficienty a, b a c obecné rovnice přímky p.

Volitelně lze zobrazit:
	popis důležitých bodů a přímek;
	rovnici paraboly ve vrcholovém tvaru;
	osu paraboly;
	vrchol paraboly;
	ohnisko paraboly;
	řídící přímku paraboly;
	rovnici přímky p;
	průsečíky přímky p a paraboly.
	
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="anal_parabola_primka_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
delta=0.025(x2-x1);

m0=0;mmin=(8/10)x1;mmax=(8/10)x2;deltam=(2/100)(x2-x1);
n0=0;nmin=(8/10)x1;nmax=(8/10)x2;deltan=(2/100)(x2-x1);
p0=1;pmin=(8/10)x1;pmax=(8/10)x2;deltap=(5/1000)(x2-x1);
akoef0=-1;akoefmin=-10;akoefmax=10;deltaakoef=(1/20);
bkoef0=1;bkoefmin=-10;bkoefmax=10;deltabkoef=(1/20);
ckoef0=0;ckoefmin=-10;ckoefmax=10;deltackoef=(1/20);


tloustka=0.005;
velikostbodu=0.017;
velikostpisma=15;

barva=Black;
barvam=Darker[Blue,0.4];
barvan=Darker[Green,0.6];
barvap=Magenta;
barvakrivky=Black;
barvaprimky=Blue;
barvaohnisko=Magenta;
barvaprimka=Magenta;
barvapruvodic=Darker[Brown];
barvavrchol=Brown;
barvavarovani=Red;
barvabodu=Red;

ParabolaPrimka=Manipulate[Deploy[
vrchol=Point[{m,n}];
If[osa==" osou y ",
If[p≠0,
{parabola[x_]:=((((x-m))^2)/(2p))+n,
xdolni=x1,
xhorni=x2,
ohniskox=m,
ohniskoy=n+(p/2),
ridiciprimka=Line[{{x1,n-(p/2)},{x2,n-(p/2)}}],
osaparaboly=Line[{{m,y1},{m,y2}}]},
{parabola[x_]:=0,
xdolni=x1,
xhorni=x2}],
{parabola[x_]:=(Sqrt[2p(x-m)]),
ohniskox=m+(p/2),
ohniskoy=n,
ridiciprimka=Line[{{m-(p/2),y1},{m-(p/2),y2}}],
osaparaboly=Line[{{x1,n},{x2,n}}],
If[p>0,
{xdolni=m,
xhorni=x2},
{xdolni=x1,
xhorni=m}]}];
ohnisko=Point[{ohniskox,ohniskoy}];

If[osa==" osou y ",
rceparaboly=(((x-m))^2)-2p(y-n)==0,
rceparaboly=(((y-n))^2)-2p(x-m)==0];
If[bkoef≠0,
{primkapom=-(akoef/bkoef) x-(ckoef/bkoef),
primkarce=primkapom-y==0,
primka[x_]:=primkapom},
{primkapom=akoef x+ckoef,
primkarce=primkapom==0}];
reseni=Quiet[Solve[{rceparaboly,primkarce},{x,y}]];
If[reseni≠{},
{prusecik1x=x/.reseni[[1]];
If[NumberQ[1.prusecik1x],
{chyba=False,
If[Length[reseni]==2,
{prusecik1y=y/.reseni[[1]],
prusecik2x=x/.reseni[[2]],
prusecik2y=y/.reseni[[2]]},
prusecik1y=y/.reseni[[1]]]},
chyba=True]},
chyba=True];

(*Příprava výpisu*)
pisvrchol=StringJoin[ToString[Style["V",barvavrchol],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[1.m],barvam],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[1.n],barvan],StandardForm],ToString[Style["]",barva],StandardForm]];
pisohnisko=StringJoin[ToString[Style["F",barvaohnisko],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[1.ohniskox],barvaohnisko],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[1.ohniskoy],barvaohnisko],StandardForm],ToString[Style["]",barva],StandardForm]];
If[m≥0,
znamenko1=" - ",
znamenko1=" + "];
If[n≥0,
znamenko2=" - ",
znamenko2=" + "];
If[p≥0,
znamenko3="",
znamenko3="-"];
If[osa==" osou y ",
pisrovnici=StringJoin[ToString[Style["(x ",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[1.m],StandardForm],barvam],StandardForm],ToString[Style[")^2 =",barva],StandardForm],ToString[Style[znamenko3,barva],StandardForm],ToString[Style["2 ",barva],StandardForm],ToString[Style[ToString[Abs[1.p],StandardForm],barvap],StandardForm],ToString[Style["(y",barva],StandardForm],ToString[Style[znamenko2,barva],StandardForm],ToString[Style[ToString[Abs[1.n],StandardForm],barvan],StandardForm],ToString[Style[")",barva],StandardForm]],
pisrovnici=StringJoin[ToString[Style["(y",barva],StandardForm],ToString[Style[znamenko2,barva],StandardForm],ToString[Style[ToString[Abs[1.n],StandardForm],barvan],StandardForm],ToString[Style[")^2 = ",barva],StandardForm],ToString[Style[znamenko3,barva],StandardForm],ToString[Style["2 ",barva],StandardForm],ToString[Style[ToString[Abs[1.p],StandardForm],barvap],StandardForm],ToString[Style["(x ",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[1.m],StandardForm],barvam],StandardForm],ToString[Style[")",barva],StandardForm]]];
If[bkoef≥0,
znamenko1="+ ",
znamenko1="- "];
If[ckoef≥0,
znamenko2="+ ",
znamenko2="- "];
pisrovniciprimky=StringJoin[ToString[Style[ToString[akoef,StandardForm],barvaprimky],StandardForm],ToString[Style[" x ",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[bkoef],StandardForm],barvaprimky],StandardForm],ToString[Style[" y ",barva],StandardForm],ToString[Style[znamenko2,barva],StandardForm],ToString[Style[ToString[Abs[ckoef],StandardForm],barvaprimky],StandardForm],ToString[Style[" = 0",barva],StandardForm]];
If[chyba==False&&Im[prusecik1x]==0,
If[prusecik1x≠prusecik2x∨prusecik1y≠prusecik2y,
{pisbod1=StringJoin[ToString[Style["(Subscript[P, 1])",barvabodu],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[prusecik1x,StandardForm],barvabodu],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[prusecik1y,StandardForm],barvabodu],StandardForm],ToString[Style["]",barva],StandardForm]],
pisbod2=StringJoin[ToString[Style["(Subscript[P, 2])",barvabodu],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[prusecik2x,StandardForm],barvabodu],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[prusecik2y,StandardForm],barvabodu],StandardForm],ToString[Style["]",barva],StandardForm]]},
pisbod1=StringJoin[ToString[Style["P",barvabodu],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[prusecik1x,StandardForm],barvabodu],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[prusecik1y,StandardForm],barvabodu],StandardForm],ToString[Style["]",barva],StandardForm]]],
pisbod1=ToString[Style["Průsečíky neexistují!",barvabodu],StandardForm]];

grafik=Show[
If[osa==" osou y ",
Plot[parabola[x],{x,x1,x2},PlotStyle->{Thickness[tloustka],barvakrivky},AxesOrigin->{0,0},Axes->True,Ticks->None,AxesLabel->{Style["x",15,barva,FontFamily->Times],Style["y",15,barva,FontFamily->Times]}],
Plot[{parabola[x]+n,-parabola[x]+n},{x,xdolni,xhorni},PlotStyle->{{Thickness[tloustka],barvakrivky},{Thickness[tloustka],barvakrivky}},AxesOrigin->{0,0},Ticks->None,Axes->True,AxesLabel->{Style["x",15,barva,FontFamily->Times],Style["y",15,barva,FontFamily->Times]}]],
If[bkoef≠0,
Plot[primka[x],{x,x1,x2},PlotStyle->{barvaprimky,Thickness[tloustka]}],
Plot[0,{x,x1,0.99x1},PlotStyle->{White,Thickness[0.001tloustka]}]],

Graphics[{
If[zobrazitosuparaboly∧p≠0,
{barva,Dashed,Thickness[0.5tloustka],osaparaboly},
Text[""]],
If[zobrazitvrchol∧p≠0,
{{barvavrchol,PointSize[velikostbodu],vrchol},
If[zobrazitpopis,
Text[Style["V",15,barvavrchol,FontFamily->Times],{m+delta,n-Sign[p]delta},{Center,Center}],
Text[""]]},
Text[""]],
If[zobrazitohnisko∧p≠0,
{{barvaohnisko,PointSize[velikostbodu],ohnisko},
If[zobrazitpopis,
Text[Style["F",15,barvaohnisko,FontFamily->Times],{ohniskox+delta,ohniskoy+Sign[p]delta},{Center,Center}],
Text[""]]},
Text[""]],
If[zobrazitridiciprimku∧p≠0,
{{barvaprimka,Thickness[0.75tloustka],ridiciprimka},
If[zobrazitpopis,
If[osa==" osou y "∧p≠0,
Text[Style["p",15,barvaprimka,FontFamily->Times],{x1+delta,n-(p/2)+delta},{Center,Center}],
If[osa==" osou x "∧p≠0,
Text[Style["p",15,barvaprimka,FontFamily->Times],{m-(p/2)-delta,y2-delta},{Center,Center}],
Text[""]]],
Text[""]]},
Text[""]],
If[p==0,
Text[Style["P A R A B O L A   N E N Í   D E F I N O V Á N A!",20,barvavarovani,Bold,FontFamily->Times],{0.5(x1+x2),0.25y2},{Center,Center}],
Text[""]],
If[bkoef==0,
If[akoef≠0,
{barvaprimky,Thickness[tloustka],Line[{{-(ckoef/akoef),y1},{-(ckoef/akoef),y2}}]},
Text[Style["P Ř Í M K A   N E N Í   D E F I N O V Á N A!",20,barvavarovani,Bold,FontFamily->Times],{0.5(x1+x2),0.25y1},{Center,Center}]],
Text[""]],
If[p≠0&&zobrazitbody&&chyba==False&&Im[prusecik1x]==0,
{{barvabodu,PointSize[velikostbodu],Point[{prusecik1x,prusecik1y}]},
{barvabodu,PointSize[velikostbodu],Point[{prusecik2x,prusecik2y}]},
If[zobrazitpopis,
If[Length[reseni]==2,
If[prusecik1x==prusecik2x&&prusecik1y==prusecik2y,
Text[Style["P",15,barvabodu,FontFamily->Times],{prusecik1x,prusecik1y+delta},{Center,Center}],
{Text[Style["(Subscript[P, 1])",15,barvabodu,FontFamily->Times],{prusecik1x-delta,prusecik1y},{Center,Center}],
Text[Style["(Subscript[P, 2])",15,barvabodu,FontFamily->Times],{prusecik2x+delta,prusecik2y},{Center,Center}]}],
Text[Style["P",15,barvabodu,FontFamily->Times],{prusecik1x,prusecik1y+delta},{Center,Center}]],
Text[""]]},
Text[""]]}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->500
]],

Item[ToString[Style["Parabola:",15,barvakrivky,FontFamily->Times,Bold,Underlined],StandardForm],Alignment->Left],
{{m,m0,Style["m",15,barvam,Italic]},mmin,mmax,deltam},
{{n,n0,Style["n",15,barvan,Italic]},nmin,nmax,deltan},
{{p,p0,Style["p",15,barvap,Italic]},pmin,pmax,deltap},
Delimiter,
Item[ToString[Style["Přímka: ax + by + c = 0",15,barvaprimky,FontFamily->Times,Bold],StandardForm],Alignment->Left],
{{akoef,akoef0,Style["a",15,barvaprimky,Italic]},akoefmin,akoefmax,deltaakoef},
{{bkoef,bkoef0,Style["b",15,barvaprimky,Italic]},bkoefmin,bkoefmax,deltabkoef},
{{ckoef,ckoef0,Style["c",15,barvaprimky,Italic]},ckoefmin,ckoefmax,deltackoef},
Delimiter,
{{osa," osou y ",Style["osa \[VerticalSeparator]\[VerticalSeparator] s",15,barva,FontFamily->Times]},{" osou x "," osou y "}},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitpopis,True,Style["- popis",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitrovnici,True,Style["- rovnici",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitosuparaboly,True,Style["- osu paraboly",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvrchol,True,Style["- vrchol",15,barvavrchol,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitohnisko,True,Style["- ohnisko",15,barvaohnisko,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitridiciprimku,True,Style["- řídící přímku",15,barvaohnisko,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitrovniciprimky,True,Style["- rovnici přímky",15,barvaprimky,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitbody,True,Style["- průsečíky",15,barvabodu,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitrovnici&&p≠0,
Item[Style[pisrovnici,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitrovniciprimky&&p≠0,
Item[Style[pisrovniciprimky,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&p≠0,
Item[Style[pisbod1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&p≠0&&Length[reseni]==2&&Im[prusecik1x]==0&&(prusecik1x≠prusecik2x∨prusecik1y≠prusecik2y),
Item[Style[pisbod2,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, 2010",10,Black,FontFamily->Times],"",Style["Parabola a přímka",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.

ParabolaPrimka