Kružnice (elipsa)

Tento interaktivní notebook umožňuje zobrazit kružnici (resp. elipsu) v závislosti na zadaných parametrech. Zároveň je možné zobrazit souřadnice vrcholů a ohnisek elipsy a rovnici zobrazené kuželosečky.
Pomocí posuvníků lze nastavit:
	x-ovou souřadnici m středu kuželosečky;
	y-ovou souřadnici n středu kuželosečky;
	délku hlavní poloosy a elipsy (v případě, že je zvolena volba kružnice, jedná se o její poloměr);
	délku vedlejší poloosy b elipsy (je-li zvolena volba kružnice, nemá tento parametr na zobrazení žádný vliv);
	úhel φ pomocí kterého lze vysvětlit definice zobrazovaných kuželoseček (jeho hodnota se mění v intervalu <0; 4π>). Tento parametr se projeví pouze tehdy, je-li vybrána možnost zobrazit průvodič.

Volitelně lze dále zobrazit:
	typ kuželosečky - kružnice nebo elipsa;
	popis zobrazených bodů;
	souřadnice středu kuželosečky a souřadnice vrcholů a ohnisek elipsy;
	poloosy elipsy;
	průvodič - možno vysvětlit definici kuželosečky jako množiny bodů, které mají určitou vzdálenost od vybraných bodů;
	ohniska elipsy;
	hlavní vrcholy elipsy;
	vedlejší vrcholy elipsy;
	rovnici kuželosečky ve středovém tvaru.

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

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

n0=0;nmin=x1;nmax=x2;deltan=(((x2-x1))/40);
m0=0;mmin=x1;mmax=x2;deltam=(((x2-x1))/40);
a0=2;amin=(((x2-x1))/40);amax=x2;deltaa=(((x2-x1))/40);
b0=2;bmin=(((x2-x1))/40);bmax=x2;deltab=(((x2-x1))/40);
fi0=(π/3);fimin=0;fimax=4π;deltafi=(π/24);

tloustka=0.005;
velikostbodu=0.02;
sipka=0.035;
velikostpisma=15;

barva=Black;
barvam=Darker[Blue,0.4];
barvan=Lighter[Blue,0.1];
barvaa=Darker[Green,0.4];
barvab=Purple;
barvakce=Red;
barvaohnisko=Magenta;
barvapruvodic=Darker[Brown];
barvahlvrchol=Lighter[Orange,0.2];
barvavedlvrchol=Darker[Orange];

osax={
Arrowheads[{0,0.5sipka}],
Arrow[{{x1,stredy},{x2,stredy}}]};
osay={
Arrowheads[{0,0.5sipka}],
Arrow[{{stredx,y1},{stredx,y2}}]};

KruzniceElipsa=Manipulate[Deploy[
pruvodicm=Line[{{0,n},{m,n}}];
pruvodicn=Line[{{m,0},{m,n}}];
If[typkuzelosecky=="elipsa",
If[a>b,
{hlvrchol1x=m-a,
hlvrchol1y=n,
hlvrchol2x=m+a,
hlvrchol2y=n,
vedlvrchol1x=m,
vedlvrchol1y=n+b,
vedlvrchol2x=m,
vedlvrchol2y=n-b,
ohnisko1x=m-(Sqrt[(a^2)-(b^2)]),
ohnisko1y=n,
ohnisko2x=m+(Sqrt[(a^2)-(b^2)]),
ohnisko2y=n},
{vedlvrchol1x=m-a,
vedlvrchol1y=n,
vedlvrchol2x=m+a,
vedlvrchol2y=n,
hlvrchol1x=m,
hlvrchol1y=n+b,
hlvrchol2x=m,
hlvrchol2y=n-b,
ohnisko1x=m,
ohnisko1y=n+(Sqrt[(b^2)-(a^2)]),
ohnisko2x=m,
ohnisko2y=n-(Sqrt[(b^2)-(a^2)])}],
""];
vrchol1=Point[{hlvrchol1x,hlvrchol1y}];
vrchol2=Point[{hlvrchol2x,hlvrchol2y}];
vrchol3=Point[{vedlvrchol1x,vedlvrchol1y}];
vrchol4=Point[{vedlvrchol2x,vedlvrchol2y}];
souradniceXx=a Cos[fi]+m;
If[typkuzelosecky=="elipsa",
{souradniceXy=b Sin[fi]+n,
pruvodicfi=Line[{{ohnisko1x,ohnisko1y},{souradniceXx,souradniceXy},{ohnisko2x,ohnisko2y}}]},
{souradniceXy=a Sin[fi]+n,
pruvodicfi=Line[{{m,n},{souradniceXx,souradniceXy}}]}];
bodX=Point[{souradniceXx,souradniceXy}];

(*Příprava výpisu*)
pisstred=StringJoin[ToString[Style["S",barvakce],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[m,StandardForm],barvam],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[n,StandardForm],barvan],StandardForm],ToString[Style["]",barva],StandardForm]];
pishlavnivrcholy=StringJoin[ToString[Style["A",barvahlvrchol],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[1.hlvrchol1x],barvahlvrchol],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[1.hlvrchol1y],barvahlvrchol],StandardForm],ToString[Style["]",barva],StandardForm],ToString[Style["    B",barvahlvrchol],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[1.hlvrchol2x],barvahlvrchol],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[1.hlvrchol2y],barvahlvrchol],StandardForm],ToString[Style["]",barva],StandardForm]];
pisvedlejsivrcholy=StringJoin[ToString[Style["C",barvavedlvrchol],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[1.vedlvrchol1x],barvavedlvrchol],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[1.vedlvrchol1y],barvavedlvrchol],StandardForm],ToString[Style["]",barva],StandardForm],ToString[Style["    D",barvavedlvrchol],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[1.vedlvrchol2x],barvavedlvrchol],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[1.vedlvrchol2y],barvavedlvrchol],StandardForm],ToString[Style["]",barva],StandardForm]];
pisohniska=StringJoin[ToString[Style["(Subscript[F, 1])",barvaohnisko],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[ohnisko1x,StandardForm],barvaohnisko],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[ohnisko1y,StandardForm],barvaohnisko],StandardForm],ToString[Style["]",barva],StandardForm],ToString[Style["    (Subscript[F, 2])",barvaohnisko],StandardForm],ToString[Style[" = [",barva],StandardForm],ToString[Style[ToString[ohnisko2x,StandardForm],barvaohnisko],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[ohnisko2y,StandardForm],barvaohnisko],StandardForm],ToString[Style["]",barva],StandardForm]];
If[m≥0,
znamenko1=" - ",
znamenko1=" + "];
If[n≥0,
znamenko2=" - ",
znamenko2=" + "];
If[IntegerQ[a],
{zavorka1="",
zavorka2="\!\(\*SuperscriptBox[\(\\ \), \(2\)]\)"},
{zavorka1="(",
zavorka2=")^2"}];
If[IntegerQ[b],
{zavorka3="",
zavorka4="\!\(\*SuperscriptBox[\(\\ \), \(2\)]\)"},
{zavorka3="(",
zavorka4=")^2"}];
If[typkuzelosecky=="kružnice"∨a==b,
pisrovnici=StringJoin[ToString[Style["(x",barva],StandardForm],ToString[Style[znamenko1,barva],StandardForm],ToString[Style[ToString[Abs[m],StandardForm],barvam],StandardForm],ToString[Style[")^2 + (y",barva],StandardForm],ToString[Style[znamenko2,barva],StandardForm],ToString[Style[ToString[Abs[n],StandardForm],barvan],StandardForm],ToString[Style[")^2 = ",barva],StandardForm],ToString[Style[zavorka1,barva],StandardForm],ToString[Style[ToString[a,StandardForm],barvaa],StandardForm],ToString[Style[zavorka2,barva],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[zavorka1,barva],StandardForm],ToString[Style[ToString[a,StandardForm],barvaa],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[b,StandardForm],barvab],StandardForm],ToString[Style[zavorka4,barva],StandardForm]]]],StandardForm],ToString[Style[" = 1",barva],StandardForm]]];
(*Příprava výpisu*)

grafik=Show[
Graphics[{
{barva,Thickness[0.5tloustka],osax},
{barva,Thickness[0.5tloustka],osay},
Text[Style["x",15,barva,FontFamily->Times,Italic],{x2,stredx},{Right,Top}],
Text[Style["y",15,barva,FontFamily->Times,Italic],{0.05x1,y2},{Center,Top}],
{barvakce,PointSize[0.7velikostbodu],Point[{m,n}]},
If[zobrazitpopis,
Text[Style["S",15,barvakce,FontFamily->Times],{m+delta,n+delta},{Center,Center}],
Text[""]],
If[typkuzelosecky=="kružnice",
{barvakce,Thickness[tloustka],Circle[{m,n},a]},
{barvakce,Thickness[tloustka],Circle[{m,n},{a,b}]}],
If[zobrazitpoloosy∧typkuzelosecky=="elipsa"∧a≠b,
{{barvaa,Thickness[tloustka],Dashed,Line[{{m,n},{m-a,n}}]},
{barvab,Thickness[tloustka],Dashed,Line[{{m,n},{m,n+b}}]}},
Text[""]],
If[zobrazitsouradnice,
{{barvam,Thickness[0.5tloustka],Dotted,pruvodicm},
{barvan,Thickness[0.5tloustka],Dotted,pruvodicn},
Text[Style[ToString[1.m],15,barvam,FontFamily->Times],{m,0.02y1},{Center,Top}],
Text[Style[ToString[1.n],15,barvan,FontFamily->Times],{0.02x1,n},{Right,Center}]},
Text[""]],
If[zobrazitpruvodic,
{{barvapruvodic,Thickness[0.5tloustka],Dashed,pruvodicfi},
{barvapruvodic,PointSize[velikostbodu],bodX},
If[zobrazitpopis,
Text[Style["X",15,barvapruvodic,FontFamily->Times],{souradniceXx+delta,souradniceXy+delta},{Center,Center}],
Text[""]]},
Text[""]],
If[zobrazitohniska∧typkuzelosecky=="elipsa"∧a≠b,
{{barvaohnisko,PointSize[velikostbodu],Point[{ohnisko1x,ohnisko1y}]},
{barvaohnisko,PointSize[velikostbodu],Point[{ohnisko2x,ohnisko2y}]},
If[zobrazitpopis,
If[a>b,
{Text[Style["(Subscript[F, 1])",15,barvaohnisko,FontFamily->Times],{ohnisko1x,ohnisko1y-delta},{Center,Top}],
Text[Style["(Subscript[F, 2])",15,barvaohnisko,FontFamily->Times],{ohnisko2x,ohnisko2y-delta},{Center,Top}]},
{Text[Style["(Subscript[F, 1])",15,barvaohnisko,FontFamily->Times],{ohnisko1x-delta,ohnisko1y},{Right,Center}],
Text[Style["(Subscript[F, 2])",15,barvaohnisko,FontFamily->Times],{ohnisko2x-delta,ohnisko2y},{Right,Center}]}],
Text[""]]},
Text[""]],
If[zobrazithlavnivrcholy∧typkuzelosecky=="elipsa"∧a≠b,
{{barvahlvrchol,PointSize[velikostbodu],vrchol1},
{barvahlvrchol,PointSize[velikostbodu],vrchol2},
If[zobrazitpopis,
If[a>b,
{Text[Style["A",15,barvahlvrchol,FontFamily->Times],{hlvrchol1x-delta,hlvrchol1y},{Right,Center}],
Text[Style["B",15,barvahlvrchol,FontFamily->Times],{hlvrchol2x+delta,hlvrchol2y},{Left,Center}]},{Text[Style["A",15,barvahlvrchol,FontFamily->Times],{hlvrchol1x,hlvrchol1y+delta},{Center,Bottom}],
Text[Style["B",15,barvahlvrchol,FontFamily->Times],{hlvrchol2x,hlvrchol2y-delta},{Center,Top}]}],
Text[""]]},
Text[""]],
If[zobrazitvedlejsivrcholy∧typkuzelosecky=="elipsa"∧a≠b,
{{barvavedlvrchol,PointSize[velikostbodu],vrchol3},
{barvavedlvrchol,PointSize[velikostbodu],vrchol4},
If[zobrazitpopis,
If[a>b,
{Text[Style["C",15,barvavedlvrchol,FontFamily->Times],{vedlvrchol1x,vedlvrchol1y+delta},{Center,Bottom}],
Text[Style["D",15,barvavedlvrchol,FontFamily->Times],{vedlvrchol2x,vedlvrchol2y-delta},{Center,Top}]},
{Text[Style["C",15,barvavedlvrchol,FontFamily->Times],{vedlvrchol1x-delta,vedlvrchol1y},{Right,Center}],
Text[Style["D",15,barvavedlvrchol,FontFamily->Times],{vedlvrchol2x+delta,vedlvrchol2y},{Left,Center}]}],
Text[""]]},
Text[""]]}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->500
]],

{{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,
{{fi,fi0,Style["φ",15,barvapruvodic,Italic]},fimin,fimax,deltafi},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{typkuzelosecky,"kružnice",Style["kuželosečka",15,barva,FontFamily->Times]},{"kružnice","elipsa"},ControlType->RadioButton},
{{zobrazitpopis,True,Style["- popis",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitsouradnice,False,Style["- souřadnice",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpoloosy,False,Style["- poloosy",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpruvodic,False,Style["- průvodič",15,barvapruvodic,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitohniska,True,Style["- ohniska",15,barvaohnisko,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazithlavnivrcholy,True,Style["- hlavní vrcholy",15,barvahlvrchol,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvedlejsivrcholy,True,Style["- vedlejší vrcholy",15,barvavedlvrchol,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitrovnici,True,Style["- rovnici",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitsouradnice&&zobrazitpopis,
Item[Style[pisstred,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitsouradnice&&zobrazitpopis&&typkuzelosecky=="elipsa"&&a≠b&&zobrazithlavnivrcholy,
Item[Style[pishlavnivrcholy,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitsouradnice&&zobrazitpopis&&typkuzelosecky=="elipsa"&&a≠b&&zobrazitvedlejsivrcholy,
Item[Style[pisvedlejsivrcholy,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitsouradnice&&zobrazitpopis&&typkuzelosecky=="elipsa"&&a≠b&&zobrazitohniska,
Item[Style[pisohniska,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",0.4velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitrovnici,
Item[Style[pisrovnici,1.2velikostpisma,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["Kružnice (elipsa)",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.

KruzniceElipsa