Vzájemná poloha kružnice a přímky II.

Následující aplet umožňuje názorně zobrazit různou vzájemnou polohu kružnice (((x-m))^2) + (((y-n))^2) = (r^2) a přímky y = k.x + q. Parametry kružnice (tj. souřadnice středu [m; n] a poloměr r) a přímky (tj. koeficienty k a q) lze zadat pomocí posuvníků.

Volitelně lze zobrazit:
	střed kružnice;
	průsečíky kružnice a přímky;
	vzdálenost přímky od středu kružnice;
	popis těchto průsečíků - buď v přesném tvaru (vyjádření pomocí odmocnin, zlomků, ...) a nebo v zaokrouhleném tvaru;
	rovnici kružnice;
	rovnici přímky.

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

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

m0=1;mmin=-8;mmax=8;deltam=(1/10);
n0=1;nmin=-8;nmax=8;deltan=(1/10);
r0=1;rmin=(1/10);rmax=8;deltar=(1/10);
k0=1;kmin=-10;kmax=10;deltak=(1/10);
q0=0;qmin=-10;qmax=10;deltaq=(1/10);

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

barva=Black;
barvaprimky=Blue;
barvakce=Black;
barvabodu=Red;
barvastredu=Darker[Brown];

VzajemnaPolohaKceaPrimky=Manipulate[Deploy[
kruznice=(((x-m))^2)+(((y-n))^2)-(r^2);
rcekruznice=kruznice==0;
grafkruznice[x_,y_]:=kruznice;
primkapom=k x+q;
primkarce=primkapom-y==0;
primka[x_]:=primkapom;

pisrcikce="";
If[m≠0,
{If[m>0,
znamenko=" - ",
znamenko=" + "],
pisrcikce=StringJoin[pisrcikce,"(x",znamenko,ToString[Abs[m],StandardForm],")^2"]},
pisrcikce=StringJoin[pisrcikce,"(x^2)"]];
If[n≠0,
{If[n>0,
znamenko=" - ",
znamenko=" + "],
pisrcikce=StringJoin[pisrcikce," + (y",znamenko,ToString[Abs[n],StandardForm],")^2"]},
pisrcikce=StringJoin[pisrcikce," + (y^2)"]];
If[IntegerQ[r],
pisrcikce=StringJoin[pisrcikce," = ",ToString[Superscript[ToString[r,StandardForm],"2"],StandardForm]],
pisrcikce=StringJoin[pisrcikce," = (",ToString[r,StandardForm],ToString[Superscript[")","2"],StandardForm]]];

pisrciprimky="y = ";
If[k≠0,
{If[k>0,
znamenko="",
znamenko="-"],
If[Abs[k]≠1,
pisrciprimky=StringJoin[pisrciprimky,znamenko,ToString[Abs[k],StandardForm],"x"],
pisrciprimky=StringJoin[pisrciprimky,znamenko,"x"]]}];
If[q≠0,
{If[q>0,
If[k≠0,
znamenko=" + ",
znamenko=""],
znamenko=" - "],
pisrciprimky=StringJoin[pisrciprimky,znamenko,ToString[Abs[q],StandardForm]]},
If[k==0,
pisrciprimky=StringJoin[pisrciprimky,"0"]]];

reseni=Solve[{rcekruznice,primkarce},{x,y}];
prusecik1x=x/.reseni[[1]];prusecik1y=y/.reseni[[1]];
prusecik2x=x/.reseni[[2]];prusecik2y=y/.reseni[[2]];
vzdalenost=((Abs[k m-n+q])/(Sqrt[(k^2)+(1^2)]));
If[zobrazitpopis≠"zaokrouhlený",
pisvzdalenost=StringJoin["‌ pS‌ = ",ToString[vzdalenost,StandardForm]],
pisvzdalenost=StringJoin["‌ pS‌ = ",ToString[Round[vzdalenost,0.01]]]];

grafik=Show[
ContourPlot[grafkruznice[x,y]==0,{x,x1,x2},{y,y1,y2},ContourStyle->{barvakce,Thickness[tloustka]},PerformanceGoal->"Quality",Axes->True,Frame->False],
Plot[primka[x],{x,x1,x2},PlotStyle->{barvaprimky,Thickness[tloustka]}],

Graphics[{
If[zobrazitstred,
{{barvastredu,PointSize[velikostbodu],Point[{m,n}]},
If[zobrazitpopis≠"žádný",
Text[Style["S",20,barvastredu,FontFamily->Times],{m,n+delta},{Center,Center}],
Text[""]]},
Text[""]],
If[Im[prusecik1x]==0&&zobrazitbody,
{{barvabodu,PointSize[velikostbodu],Point[{prusecik1x,prusecik1y}]},
{barvabodu,PointSize[velikostbodu],Point[{prusecik2x,prusecik2y}]},
If[zobrazitpopis≠"žádný",
If[prusecik1x==prusecik2x&&prusecik1y==prusecik2y,
Text[Style["P",20,barvabodu,FontFamily->Times],{prusecik1x,prusecik1y+delta},{Center,Center}],
{Text[Style["(Subscript[P, 1])",20,barvabodu,FontFamily->Times],{prusecik1x-delta,prusecik1y},{Center,Center}],
Text[Style["(Subscript[P, 2])",20,barvabodu,FontFamily->Times],{prusecik2x+delta,prusecik2y},{Center,Center}]}],
Text[""]]},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},AxesLabel->{"x","y"},ImageSize->500
]],

Item[StringJoin[ToString[Style["Kružnice: ",15,barvakce,FontFamily->Times,Bold,Underlined],StandardForm],ToString[Style["(x-m)^2 + (y-n)^2 = (r^2)",15,barvakce,FontFamily->Times],StandardForm]],Alignment->Left],
{{m,n0,Style["m",15,barva,Italic]},mmin,mmax,deltam},
{{n,n0,Style["n",15,barva,Italic]},nmin,nmax,deltan},
{{r,r0,Style["r",15,barva,Italic]},rmin,rmax,deltar},
Delimiter,
Item[StringJoin[ToString[Style["Přímka: ",15,barvaprimky,FontFamily->Times,Bold,Underlined],StandardForm],ToString[Style["y = k.x + q",15,barvaprimky,FontFamily->Times],StandardForm]],Alignment->Left],
{{k,k0,Style["k",15,barva,Italic]},kmin,kmax,deltak},
{{q,q0,Style["q",15,barva,Italic]},qmin,qmax,deltaq},
Delimiter,
Item[Style["Zobrazit:",15,barvakce,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitstred,True,Style["- střed",15,barvastredu,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitbody,True,Style["- body",15,barvabodu,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvzdalenost,False,Style["- vzdálenost",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpopis,"žádný",Style["- popis",15,barvabodu,FontFamily->Times]},{"žádný","přesný","zaokrouhlený"},ControlType->RadioButton},
Item[Style[" ",15,barvakce,FontFamily->Times],Alignment->Left],
Item[Style["Rovnice:",15,barvakce,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitrcikce,True,Style["- kružnice",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitrciprimky,True,Style["- přímky",15,barvaprimky,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitbody&&zobrazitpopis=="přesný"&&Im[prusecik1x]==0&&prusecik1x==prusecik2x&&prusecik1y==prusecik2y,
Item[Style[StringJoin["P = [",ToString[prusecik1x,StandardForm],"; ",ToString[prusecik1y,StandardForm],"]"],velikostpisma,barvabodu,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&zobrazitpopis=="zaokrouhlený"&&Im[prusecik1x]==0&&prusecik1x==prusecik2x&&prusecik1y==prusecik2y,
Item[Style[StringJoin["P = [",ToString[Round[prusecik1x,0.01]],"; ",ToString[Round[prusecik1y,0.01]],"]"],velikostpisma,barvabodu,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&zobrazitpopis=="přesný"&&Im[prusecik1x]==0&&(prusecik1x≠prusecik2x∨prusecik1y≠prusecik2y),
Item[Style[StringJoin["(Subscript[P, 1]) = [",ToString[prusecik1x,StandardForm],"; ",ToString[prusecik1y,StandardForm],"]"],velikostpisma,barvabodu,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&zobrazitpopis=="přesný"&&Im[prusecik1x]==0&&(prusecik1x≠prusecik2x∨prusecik1y≠prusecik2y),
Item[Style[StringJoin["(Subscript[P, 2]) = [",ToString[prusecik2x,StandardForm],"; ",ToString[prusecik2y,StandardForm],"]"],velikostpisma,barvabodu,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&zobrazitpopis=="zaokrouhlený"&&Im[prusecik1x]==0&&(prusecik1x≠prusecik2x∨prusecik1y≠prusecik2y),
Item[Style[StringJoin["(Subscript[P, 1]) = [",ToString[Round[prusecik1x,0.01]],"; ",ToString[Round[prusecik1y,0.01]],"]"],velikostpisma,barvabodu,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitbody&&zobrazitpopis=="zaokrouhlený"&&Im[prusecik1x]==0&&(prusecik1x≠prusecik2x∨prusecik1y≠prusecik2y),
Item[Style[StringJoin["(Subscript[P, 2]) = [",ToString[Round[prusecik2x,0.01]],"; ",ToString[Round[prusecik2y,0.01]],"]"],velikostpisma,barvabodu,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",0.3velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitrcikce,
Item[Style[pisrcikce,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",0.3velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitrciprimky,
Item[Style[pisrciprimky,velikostpisma,barvaprimky,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",0.3velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitvzdalenost,
Item[Style[pisvzdalenost,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["Vzájemná poloha kružnice a přímky",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.

VzajemnaPolohaKceaPrimky