Hyperbola a přímka

Následující interaktivní notebook umožňuje názorně pochopit vzájemnou polohu hyperboly a přímky.
Pomocí posuvníků lze měnit:
	souřadnice středu hyperboly;
	délku hlavní polosy a délku vedlejší poloosy hyperboly;
	koeficienty a, b a c obecné rovnice přímky p.

Volitelně lze zobrazit:
	popis důležitých bodů a přímek;
	rovnici hyperboly ve středovém tvaru;
	osy hyperboly;
	střed hyperboly;
	vrcholy hyperboly;
	ohniska hyperboly;
	asymptoty hyperboly;
	rovnici přímky p;
	průsečíky přímky p a hyperboly.

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_hyperbola_primka_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
delta=0.027(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);
a0=2;amin=(1/10);amax=5;deltaa=(1/10);
b0=2;bmin=(1/10);bmax=5;deltab=(1/10);
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=Lighter[Blue,0.1];
barvaa=Darker[Green,0.4];
barvab=Purple;
barvakrivky=Black;
barvaprimky=Blue;
barvaohnisko=Magenta;
barvastred=Orange;
barvakruznice=Black;
barvaasymptot=Darker[Brown];
barvavrchol=Brown;
barvavarovani=Red;
barvabodu=Red;

HyperbolaPrimka=Manipulate[Deploy[
stred=Point[{m,n}];
pruvodicm=Line[{{0,n},{m,n}}];
pruvodicn=Line[{{m,0},{m,n}}];
exc=(Sqrt[(a^2)+(b^2)]);
If[osa==" osou y ",
{hyperbola1[x_]:=a(Sqrt[((((x-m))^2)/(b^2))+1])+n,
hyperbola2[x_]:=-a(Sqrt[((((x-m))^2)/(b^2))+1])+n,
asymptota1[x_]:=(a/b)(x-m)+n,
asymptota2[x_]:=-(a/b)(x-m)+n,
ohnisko1x=m,
ohnisko1y=n+exc,
ohnisko2x=m,
ohnisko2y=n-exc,
vrchol1x=m,
vrchol1y=n+a,
vrchol2x=m,
vrchol2y=n-a,
koefsouradnic=1},
{hyperbola1[x_]:=b(Sqrt[((((x-m))^2)/(a^2))-1])+n,
hyperbola2[x_]:=-b(Sqrt[((((x-m))^2)/(a^2))-1])+n,
asymptota1[x_]:=(b/a)(x-m)+n,
asymptota2[x_]:=-(b/a)(x-m)+n,
ohnisko1x=m-exc,
ohnisko1y=n,
ohnisko2x=m+exc,
ohnisko2y=n,
vrchol1x=m-a,
vrchol1y=n,
vrchol2x=m+a,
vrchol2y=n,
koefsouradnic=-1}];
osa1hyperboly=Line[{{x1,n},{x2,n}}];
osa2hyperboly=Line[{{m,y1},{m,y2}}];
ohnisko1=Point[{ohnisko1x,ohnisko1y}];
ohnisko2=Point[{ohnisko2x,ohnisko2y}];
vrchol1=Point[{vrchol1x,vrchol1y}];
vrchol2=Point[{vrchol2x,vrchol2y}];

If[osa==" osou y ",
rcehyperboly=-(a^2)(((x-m))^2)+(b^2)(((y-n))^2)-(a^2)(b^2)==0,
rcehyperboly=(b^2)(((x-m))^2)-(a^2)(((y-n))^2)-(a^2)(b^2)==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[{rcehyperboly,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*)
If[m≥0,
znamenko1=" - ",
znamenko1=" + "];
If[n≥0,
{znamenko2=" - ",
znamenko21=" + "},
{znamenko2=" + ",
znamenko21=" - "}];
If[IntegerQ[a],
{zavorka3="",
zavorka4="\!\(\*SuperscriptBox[\(\\ \), \(2\)]\)"},
{zavorka3="(",
zavorka4=")^2"}];
If[IntegerQ[b],
{zavorka1="",
zavorka2="\!\(\*SuperscriptBox[\(\\ \), \(2\)]\)"},
{zavorka1="(",
zavorka2=")^2"}];
If[osa==" osou y ",
{pisrovnici=StringJoin[ToString[Style["- ",barva],StandardForm],ToString[DisplayForm[FractionBox[StringJoin[ToString[Style["(x",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[m],StandardForm],barvam],StandardForm],ToString[Style[")^2",barva],StandardForm]],StringJoin[ToString[Style[zavorka1,barva],StandardForm],ToString[Style[ToString[b,StandardForm],barvab],StandardForm],ToString[Style[zavorka2,barva],StandardForm]]]],StandardForm],ToString[Style[" + ",barva],StandardForm],ToString[DisplayForm[FractionBox[StringJoin[ToString[Style["(y",barva],StandardForm],ToString[Style[znamenko2,barva],StandardForm],ToString[Style[ToString[Abs[n],StandardForm],barvan],StandardForm],ToString[Style[")^2",barva],StandardForm]],StringJoin[ToString[Style[zavorka3,barva],StandardForm],ToString[Style[ToString[a,StandardForm],barvaa],StandardForm],ToString[Style[zavorka4,barva],StandardForm]]]],StandardForm],ToString[Style[" = 1",barva],StandardForm]],
pisrovniciasymptot=StringJoin[ToString[Style["(Subscript[a, 1,2]): y = ± ",barva],StandardForm],ToString[DisplayForm[FractionBox[ToString[Style[ToString[a,StandardForm],barvaa],StandardForm],ToString[Style[ToString[b,StandardForm],barvab],StandardForm]]],StandardForm],ToString[Style["(x",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[m],StandardForm],barvam],StandardForm],ToString[Style[")",barva],StandardForm],ToString[Style[znamenko21,barva],StandardForm],ToString[Style[ToString[Abs[n],StandardForm],barvan],StandardForm]]},
{pisrovnici=StringJoin[ToString[DisplayForm[FractionBox[StringJoin[ToString[Style["(x",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[m],StandardForm],barvam],StandardForm],ToString[Style[")^2",barva],StandardForm]],StringJoin[ToString[Style[zavorka3,barva],StandardForm],ToString[Style[ToString[a,StandardForm],barvaa],StandardForm],ToString[Style[zavorka4,barva],StandardForm]]]],StandardForm],ToString[Style[" - ",barva],StandardForm],ToString[DisplayForm[FractionBox[StringJoin[ToString[Style["(y",barva],StandardForm],ToString[Style[znamenko2,barva],StandardForm],ToString[Style[ToString[Abs[n],StandardForm],barvan],StandardForm],ToString[Style[")^2",barva],StandardForm]],StringJoin[ToString[Style[zavorka1,barva],StandardForm],ToString[Style[ToString[b,StandardForm],barvab],StandardForm],ToString[Style[zavorka2,barva],StandardForm]]]],StandardForm],ToString[Style[" = 1",barva],StandardForm]],
pisrovniciasymptot=StringJoin[ToString[Style["(Subscript[a, 1,2]): y = ± ",barva],StandardForm],ToString[DisplayForm[FractionBox[ToString[Style[ToString[b,StandardForm],barvab],StandardForm],ToString[Style[ToString[a,StandardForm],barvaa],StandardForm]]],StandardForm],ToString[Style["(x",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[m],StandardForm],barvam],StandardForm],ToString[Style[")",barva],StandardForm],ToString[Style[znamenko21,barva],StandardForm],ToString[Style[ToString[Abs[n],StandardForm],barvan],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,
If[Length[reseni]==1,
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]],
If[Im[prusecik1x]==0&&Im[prusecik1y]==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]]],
pisbod1=ToString[Style["Průsečíky neexistují!",barvabodu],StandardForm]];

grafik=Show[
If[osa==" osou y ",
Plot[{hyperbola1[x],hyperbola2[x]},{x,x1,x2},PlotStyle->{{Thickness[tloustka],barvakrivky},{Thickness[tloustka],barvakrivky}}],
{Plot[{hyperbola1[x],hyperbola2[x]},{x,x1,a},PlotStyle->{{Thickness[tloustka],barvakrivky},{Thickness[tloustka],barvakrivky}}],
Plot[{hyperbola1[x],hyperbola2[x]},{x,a,x2},PlotStyle->{{Thickness[tloustka],barvakrivky},{Thickness[tloustka],barvakrivky}}]}],
If[zobrazitasymptoty,
Plot[{asymptota1[x],asymptota2[x]},{x,x1,x2},PlotStyle->{{Thickness[0.5tloustka],barvaasymptot},{Thickness[0.5tloustka],barvaasymptot}}],
Plot[0,{x,0,0.01},PlotStyle->{Thickness[0.001tloustka],barva}]],
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[zobrazitosuhyperboly,
{{barva,Dashed,Thickness[0.5tloustka],osa1hyperboly},
{barva,Dashed,Thickness[0.5tloustka],osa2hyperboly},
If[zobrazitpopis,
{Text[Style["y´",15,barva,FontFamily->Times],{m-delta,y2-delta},{Center,Center}],
Text[Style["x´",15,barva,FontFamily->Times],{x2-delta,n+delta},{Center,Center}]},
Text[""]]},
Text[""]],
If[zobrazitstred,
{{barvastred,PointSize[velikostbodu],stred},
If[zobrazitpopis,
Text[Style["S",15,barvastred,FontFamily->Times],{m+delta,n-delta},{Center,Center}],
Text[""]]},
Text[""]],
If[zobrazitvrchol,
{{barvavrchol,PointSize[velikostbodu],vrchol1},
{barvavrchol,PointSize[velikostbodu],vrchol2},
If[zobrazitpopis,
{Text[Style["(Subscript[V, 1])",15,barvavrchol,FontFamily->Times],{vrchol1x+delta,vrchol1y-delta},{Center,Center}],
Text[Style["(Subscript[V, 2])",15,barvavrchol,FontFamily->Times],{vrchol2x+koefsouradnic delta,vrchol2y+koefsouradnic delta},{Center,Center}]},
Text[""]]},
Text[""]],
If[zobrazitohnisko,
{{barvaohnisko,PointSize[velikostbodu],ohnisko1},
{barvaohnisko,PointSize[velikostbodu],ohnisko2},
If[zobrazitpopis,
{Text[Style["(Subscript[F, 1])",15,barvaohnisko,FontFamily->Times],{ohnisko1x-delta,ohnisko1y+delta},{Center,Center}],
Text[Style["(Subscript[F, 2])",15,barvaohnisko,FontFamily->Times],{ohnisko2x-koefsouradnic delta,ohnisko2y-koefsouradnic delta},{Center,Center}]},
Text[""]]},
Text[""]],
If[zobrazitasymptoty∧zobrazitpopis,
{Text[Style["(Subscript[a, 1])",15,barvaasymptot,FontFamily->Times],{m+4delta,asymptota1[m+4delta]-delta},{Center,Center}],
Text[Style["(Subscript[a, 2])",15,barvaasymptot,FontFamily->Times],{m-4delta,asymptota2[m-4delta]-delta},{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[chyba==False,
If[zobrazitbody&&Im[prusecik1x]==0&&Im[prusecik1y]==0,
{{barvabodu,PointSize[velikostbodu],Point[{prusecik1x,prusecik1y}]},
If[Length[reseni]==2,
{barvabodu,PointSize[velikostbodu],Point[{prusecik2x,prusecik2y}]},
Text[""]],
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[""]],
Text[""]]}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},AxesOrigin->{0,0},Ticks->None,Axes->True,AxesLabel->{Style["x",15,barva,FontFamily->Times],Style["y",15,barva,FontFamily->Times]},ImageSize->500]],

Item[ToString[Style["Hyperbola:",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},
{{a,a0,Style["a",15,barvaa,Italic]},amin,amax,deltaa},
{{b,b0,Style["b",15,barvab,Italic]},bmin,bmax,deltab},
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 x ",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},
{{zobrazitosuhyperboly,True,Style["- osy",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitstred,True,Style["- střed",15,barvastred,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvrchol,True,Style["- vrcholy",15,barvavrchol,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitohnisko,True,Style["- ohniska",15,barvaohnisko,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitasymptoty,False,Style["- asymptoty",15,barvaasymptot,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,
Delimiter,
Dynamic[
Grid[{
{If[zobrazitrovnici,
Item[Style[pisrovnici,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitrovnici&&zobrazitasymptoty,
Item[Style[pisrovniciasymptot,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitrovniciprimky,
Item[Style[pisrovniciprimky,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody,
Item[Style[pisbod1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&Length[reseni]==2&&Im[prusecik1x]==0&&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,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Left,Bottom},
FrameLabel->{Style["© Jaroslav Reichl, 2010",10,Black,FontFamily->Times],"",Style["Hyperbola 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.

HyperbolaPrimka