Řešení goniometrických rovnic

Následující aplet umožňuje názorně pochopit řešení goniometrických rovnic typu funkce(x) = prava_strana, kde za funkce(x) lze dosadit libovolnou z funkcí sin(x), cos(x), tg(x) a cotg(x). Řešení rovnice je vykreslováno v jednotkové kružnici a v grafu příslušné funkce.
Pravou stranu rovnice lze zadat trojím způsobem:
		1) náhodně vygenerovaná pravá strana s "tabulkovou hodnotou", tj. hodnotou, jíž odpovídají "tabulkové" argumenty příslušných goniometrických funkcí;
		2) náhodně vygenerovaná pravá strana (intervaly, z něhož jsou náhodně vybírány jmenovatel a čitatel zlomku tvořící pravou stranu rovnice, lze ve zdrojovém kódu jednoduše měnit);
		3) argument zadaný uživatelem - zadává se nejdříve jmenovatel a poté čitatel zlomku, který představuje pravou stranu rovnice. Je nutné zadat pouze číselné hodnoty - jiné nebou akceptovány! Při zadávání lze použít i klávesovou kombinaci Ctrl + 2 pro zadání odmocniny. Přepínač pouze tabulkové hodnoty úhlů nemá v tomto případě žádný význam. Stejně tak nemá v tomto případě žádný význam přepínač pouze kladné hodnoty úhlů.
Goniometrickou funkci je možné vybrat z roletky, v níž jsou kromě základních funkcí (sin (x), cos(x), tg(x) a cotg(x)) také dvě dvojice (sin (x) a cos (x), tg (x) a cotg (x)) a možnost vše. V těchto případech se goniometrická funkce vybere náhodně. Tyto tři volby jsou zde z didaktických důvodů - goniometrické funkce se většinou probírají po dvou: sinus a kosinus najednou a poté najednou tangens a kotangens.
Volitelně je možné zobrazit řešení goniometrické rovnice na jednotkové kružnici nebo v grafu dané funkce.
Z didaktických důvodů lze využít i zobrazení řešení rovnice (resp. "pomocné rovnice") v prvním kvadrantu jednotkové kružnice.
Příslušné goniometrické rovnice lze řešit buď v množině reálných čísel nebo v intervalu <0; 2π) (a jeho ekvivalentu vyjádřeném ve stupňové míře). Řešení lze zobrazit jak v míře stupňové tak v míře obloukové.

Tlačítkem Další krok se zobrazí další krok výpočtu. V případě, že je výpočet již u konce, má tlačítko stejný význam jako tlačítko Další úloha.
Tlačítkem Další úloha lze v kterékoliv fázi výpočtu přejít k další úloze, kterou zadáme buď manuálně a nebo náhodně.
Tlačítkem Ulož obrázek se uloží právě zobrazený pracovní prostor (tj. bílý obdélník) 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. Soubor je uložen ve formátu *.JPG.
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, 2008

Příprava pro vykreslení grafu

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

x1=-10;x2=10;
y1=-10;y2=10;
deltax=1;deltay=2;
stredx=((x1+x2)/2);stredy=((y1+y2)/2);
polomer=0.3x2;
stredkcex=x1+1.6polomer;
stredkcey=y1+1.6polomer;
stredgrafux=x2-2.1polomer;
koeficientgrafux=((2π)/(2polomer));
presnost=0.001;

seznamfci={"sin (x)","cos (x)","sin (x) a cos (x)","tg (x)","cotg (x)","tg (x) a cotg (x)","vše"};
defaultnifce=seznamfci[[1]];
minulavybranafce="";
minulanahoda=False;
minulejednotky="radiány";
jednotka="";

pocetkroku=0;
dalsipriklad=True;
citatelesincos={0,1,(Sqrt[2]),(Sqrt[3]),2};
citateletgcotg={0,1,(Sqrt[3]),3};
dolnimezcitatele=1;
hornimezcitatele=20;
dolnimezjmenovatele=1;
hornimezjmenovatele=25;

barva=Black;
barvakce=Black;
barvapruvodic=Black;
barvagraf=Black;
barvauhel=Darker[Blue,0.4];
barvauhel1=Lighter[Red,0.2];
barvauhel2=Darker[Red,0.4];
barvavarovani=Red;
barvaODP=Red;
barvasin=Lighter[Blue,0.2];
barvacos=Lighter[Orange,0.2];
barvatg=Darker[Green,0.3];
barvacotg=Magenta;

tloustka=0.004;
osax=Line[{{stredkcex-1.5polomer,stredkcey},{stredkcex+1.5polomer,stredkcey}}];
osay=Line[{{stredkcex,stredkcey-1.25polomer},{stredkcex,stredkcey+1.25polomer}}];
kruznice=Circle[{stredkcex,stredkcey},polomer];

osaxgrafu=Line[{{stredgrafux-polomer,stredkcey},{stredgrafux+2polomer,stredkcey}}];
osaygrafu=Line[{{stredgrafux,stredkcey-2.2polomer},{stredgrafux,stredkcey+2.2polomer}}];

GoniometrickeRovnice=Manipulate[
If[dalsipriklad∨minulavybranafce≠vybranafce∨minulanahoda≠nahoda,
{If[minulavybranafce≠vybranafce,
{pocetkroku=0,
If[dalsipriklad==False,
minulejednotky=jednotkyuhlu,
""],
dalsipriklad=True,
If[nahoda,
minulanahoda=False,
minulanahoda=True],
minulavybranafce=vybranafce,
If[vybranafce==seznamfci[[1]],
{goniomfce[x_]=Sin[x],
nazevfce="sin",
perioda=2π},
If[vybranafce==seznamfci[[2]],
{goniomfce[x_]=Cos[x],
nazevfce="cos",
perioda=2π},
If[vybranafce==seznamfci[[3]],
{perioda=2π,
If[RandomInteger[{1,2}]==1,
{goniomfce[x_]=Sin[x],
nazevfce="sin"},
{goniomfce[x_]=Cos[x],
nazevfce="cos"}]},
If[vybranafce==seznamfci[[4]],
{goniomfce[x_]=Tan[x],
nazevfce="tg",
perioda=π},
If[vybranafce==seznamfci[[5]],
{goniomfce[x_]=Cot[x],
nazevfce="cotg",
perioda=π},
If[vybranafce==seznamfci[[6]],
{perioda=π,
If[RandomInteger[{1,2}]==1,
{goniomfce[x_]=Tan[x],
nazevfce="tg"},
{goniomfce[x_]=Cot[x],
nazevfce="cotg"}]},
If[vybranafce==seznamfci[[7]],
{pomocna=RandomInteger[{1,4}],
If[pomocna==1,
{goniomfce[x_]=Sin[x],
nazevfce="sin",
perioda=2π},
If[pomocna==2,
{goniomfce[x_]=Cos[x],
nazevfce="cos",
perioda=2π},
If[pomocna==3,
{goniomfce[x_]=Tan[x],
nazevfce="tg",
perioda=π},
{goniomfce[x_]=Cot[x],
nazevfce="cotg",
perioda=π}]]]}]]]]]]]},
""],
If[minulanahoda≠nahoda∨dalsipriklad,
{dalsipriklad=False,
minulanahoda=nahoda,
If[nahoda,
{okzadani=True,
If[pouzekladne,
koeficient=1,
koeficient=RandomChoice[{-1,1}]],
If[tabulkovehodnoty,
If[nazevfce=="sin"∨nazevfce=="cos",
{fcecitatel=koeficient*RandomChoice[citatelesincos],
fcejmenovatel=2},
{fcecitatel=koeficient*RandomChoice[citateletgcotg],
fcejmenovatel=(Sqrt[3])}],
{fcecitatel=koeficient*RandomInteger[{dolnimezcitatele,hornimezcitatele}],
fcejmenovatel=RandomInteger[{dolnimezjmenovatele,hornimezjmenovatele}]}]},
{fcecitatel=Input["Zadejte čitatele pravé strany goniometrické rovnice:"],
If[NumberQ[1. fcecitatel],
{fcejmenovatel=Input["Zadejte jmenovatele pravé strany goniometrické rovnice:"],
If[NumberQ[1. fcejmenovatel],
okzadani=True,
okzadani=False]},
okzadani=False]}]},
""],
If[okzadani,
{pravastrana=(fcecitatel/fcejmenovatel),
rovnice=goniomfce[fipom]==pravastrana;
reseni=Quiet[Solve[rovnice,fipom]];
If[reseni≠{},
{chyba=False,
fi1=fipom/.reseni[[1]],
If[Im[1.fi1]≠0,
chyba=True,
""]},
chyba=True(*Do této větve by se program neměl dostat - každá goniometrická rce má v komplexních číslech řešení.*)],
If[chyba==False,
{rovnice=goniomfce[fipom]==Abs[pravastrana];
reseni=Quiet[Solve[rovnice,fipom]];
If[reseni≠{},
{chyba=False,
fi0=Abs[fipom/.reseni[[1]]],
If[Im[1.fi0]==0,
uhelfi0={Circle[{stredkcex,stredkcey},0.4polomer,{0,fi0}],
Circle[{stredkcex,stredkcey},0.45polomer,{0,fi0}]},
chyba=True]},
chyba=True(*Do této větve by se program neměl dostat - každá goniometrická rce má v komplexních číslech řešení.*)]},
""],
If[chyba==False,
{If[fi1<0,
fi1=perioda+fi1,
""],
If[nazevfce=="sin",
If[fi1≤(π/2),
fi2=π-fi0,
If[fi1≤π,
fi2=fi0,
If[fi1≤((3π)/2),
fi2=2π-fi0,
fi2=π+fi0]]],
If[nazevfce=="cos",
If[fi1≤(π/2),
fi2=2π-fi0,
If[fi1≤π,
fi2=π+fi0,
If[fi1≤((3π)/2),
fi2=π-fi0,
fi2=fi0]]],
fi2=fi1]],
If[fi1≠fi2,
{dvereseni=True,
maxpocetkroku=4},
{dvereseni=False,
maxpocetkroku=3}],
bodmimoD1=(π/2);
bodmimoD2=((3π)/2);
bodmimoD3=2π;
bodmimoD4=π;
periodaktisku=StringReplace[StringJoin[ToString[(perioda/π)],"kπ"],"1"->""],
uhelfi1=Circle[{stredkcex,stredkcey},0.60polomer,{0,fi1}],
uhelfi2=Circle[{stredkcex,stredkcey},0.70polomer,{0,fi2}],
bodx0=stredkcex+polomer Cos[fi0];body0=stredkcey+polomer Sin[fi0];
bodx=stredkcex+polomer Cos[fi1];body=stredkcey+polomer Sin[fi1];
bodx2=stredkcex+polomer Cos[fi2];body2=stredkcey+polomer Sin[fi2];
fcelinegraf0=Line[{{stredgrafux-polomer,stredkcey+Abs[pravastrana]},{stredgrafux+2polomer,stredkcey+Abs[pravastrana]}}],
fcelinegraf1=Line[{{stredgrafux-polomer,stredkcey+pravastrana},{stredgrafux+2polomer,stredkcey+pravastrana}}],
fceuhelgraf0=Line[{{stredgrafux+(fi0/koeficientgrafux),stredkcey+Abs[pravastrana]},{stredgrafux+(fi0/koeficientgrafux),stredkcey}}],
fceuhelgraf1=Line[{{stredgrafux+(fi1/koeficientgrafux),stredkcey+pravastrana},{stredgrafux+(fi1/koeficientgrafux),stredkcey}}],
fceuhelgraf2=Line[{{stredgrafux+(fi2/koeficientgrafux),stredkcey+pravastrana},{stredgrafux+(fi2/koeficientgrafux),stredkcey}}],
fcebodgraf0=Point[{stredgrafux+(fi0/koeficientgrafux),stredkcey}],
fcebodgraf1=Point[{stredgrafux+(fi1/koeficientgrafux),stredkcey}],
fcebodgraf2=Point[{stredgrafux+(fi2/koeficientgrafux),stredkcey}],
If[nazevfce=="sin",
{fceline0=Line[{{stredkcex-1.25polomer,body0},{stredkcex+1.25polomer,body0}}],
fceline1=Line[{{stredkcex-1.25polomer,body},{stredkcex+1.25polomer,body}}],
fcepruvodic0=Line[{{stredkcex,stredkcey},{bodx0,body0}}],
fcepruvodic1=Line[{{stredkcex,stredkcey},{bodx,body}}],
fcepruvodic2=Line[{{stredkcex,stredkcey},{bodx2,body2}}],
barvafce=barvasin},
If[nazevfce=="cos",
{fceline0=Line[{{bodx0,stredkcey-1.1polomer},{bodx0,stredkcey+1.1polomer}}],
fceline1=Line[{{bodx,stredkcey-1.1polomer},{bodx,stredkcey+1.1polomer}}],
fcepruvodic0=Line[{{stredkcex,stredkcey},{bodx0,body0}}],
fcepruvodic1=Line[{{stredkcex,stredkcey},{bodx,body}}],
fcepruvodic2=Line[{{stredkcex,stredkcey},{bodx2,body2}}],
barvafce=barvacos},
If[nazevfce=="tg",
{fceline0=Line[{{stredkcex+polomer,stredkcey},{stredkcex+polomer,stredkcey+polomer Tan[fi0]}}],
fceline1=Line[{{stredkcex+polomer,stredkcey},{stredkcex+polomer,stredkcey+polomer Tan[fi1]}}],
fcepruvodic0=Line[{{stredkcex,stredkcey},{stredkcex+polomer,stredkcey+polomer Tan[fi0]}}],
fcepruvodic1=Line[{{bodx,body},{stredkcex+polomer,stredkcey+polomer Tan[fi1]}}],
fcepruvodic2=Line[{{stredkcex,stredkcey},{stredkcex+polomer,stredkcey+polomer Tan[fi2]}}],
barvafce=barvatg},
{fceline0=Line[{{stredkcex,stredkcey+polomer},{stredkcex+polomer Cot[fi0],stredkcey+polomer}}],
fceline1=Line[{{stredkcex,stredkcey+polomer},{stredkcex+polomer Cot[fi1],stredkcey+polomer}}],
fcepruvodic0=Line[{{stredkcex,stredkcey},{stredkcex+polomer Cot[fi0],stredkcey+polomer}}],
fcepruvodic1=Line[{{stredkcex,stredkcey},{stredkcex+polomer Cot[fi1],stredkcey+polomer}}],
fcepruvodic2=Line[{{stredkcex,stredkcey},{stredkcex+polomer Cot[fi2],stredkcey+polomer}}],
barvafce=barvacotg}]]],
If[Length[Abs[fi0]]==1,
{fi0=Round[fi0,presnost],
fi1=Round[fi1,presnost],
fi2=Round[fi2,presnost],
zaokrouhlit=True},
zaokrouhlit=False],
If[jednotkyuhlu=="stupně",
If[zaokrouhlit,
{fi0=Round[(180/π)fi0,presnost],
fi1=Round[(180/π)fi1,presnost],
fi2=Round[(180/π)fi2,presnost]},
{fi0=(180/π)fi0,fi1=(180/π)fi1,fi2=(180/π)fi2,
bodmimoD1=(180/π)bodmimoD1,bodmimoD2=(180/π)bodmimoD2,bodmimoD3=(180/π)bodmimoD3,bodmimoD4=(180/π)bodmimoD4,
jednotka="°",
periodaktisku=StringJoin[ToString[(180/π)perioda],"° k"]}]
""]},
""]},
""]},
""];
If[okzadani&&chyba==False,
If[minulejednotky≠jednotkyuhlu,
{minulejednotky=jednotkyuhlu,
If[jednotkyuhlu=="radiány",
{jednotka="",
periodaktisku=StringReplace[StringJoin[ToString[(perioda/π)],"kπ"],"1"->""],
bodmimoD1=(π/180)bodmimoD1,bodmimoD2=(π/180)bodmimoD2,bodmimoD3=(π/180)bodmimoD3,bodmimoD4=(π/180)bodmimoD4,
If[zaokrouhlit,
{fi0=Round[(π/180)fi0,presnost],
fi1=Round[(π/180)fi1,presnost],
fi2=Round[(π/180)fi2,presnost]},
{fi0=(π/180)fi0,fi1=(π/180)fi1,fi2=(π/180)fi2}]},
{jednotka="°",
periodaktisku=StringJoin[ToString[(180/π)perioda],"° k"],
bodmimoD1=(180/π)bodmimoD1,bodmimoD2=(180/π)bodmimoD2,bodmimoD3=(180/π)bodmimoD3,bodmimoD4=(180/π)bodmimoD4,
If[zaokrouhlit,
{fi0=Round[(180/π)fi0,presnost],
fi1=Round[(180/π)fi1,presnost],
fi2=Round[(180/π)fi2,presnost]},
{fi0=(180/π)fi0,fi1=(180/π)fi1,fi2=(180/π)fi2}]}]},
""],
""];

grafik=Deploy[
Show[
If[zobrazitgraf&&okzadani&&chyba==False,
If[nazevfce=="tg",
Plot[goniomfce[koeficientgrafux(x-stredgrafux)]+stredkcey,{x,stredgrafux-polomer,stredgrafux+2polomer},Exclusions->{Cos[koeficientgrafux(x-stredgrafux)]==0},PlotStyle->{barvagraf,Thickness[tloustka]},AxesOrigin->{stredgrafux,stredkcey},Axes->False],
If[nazevfce=="cotg",
Plot[goniomfce[koeficientgrafux(x-stredgrafux)]+stredkcey,{x,stredgrafux-polomer,stredgrafux+2polomer},Exclusions->{Sin[koeficientgrafux(x-stredgrafux)]==0},PlotStyle->{barvagraf,Thickness[tloustka]},AxesOrigin->{stredgrafux,stredkcey},Axes->False],
Plot[goniomfce[koeficientgrafux(x-stredgrafux)]+stredkcey,{x,stredgrafux-polomer,stredgrafux+2polomer},PlotStyle->{barvagraf,Thickness[tloustka]},AxesOrigin->{stredgrafux,stredkcey},Axes->False]]],
Plot[stredkcey,{x,stredgrafux-polomer,stredgrafux+polomer},PlotStyle->{White,Thickness[0.1tloustka]},AxesOrigin->{stredgrafux,stredkcey},Axes->False]
(*Vykreslení této konstanty je zde proto, aby systém nezobrazoval chybové hlášení v případě, že je vypnuto zobrazení grafu. Proto se vykreslí bílou barvou konstanta kopírující osu x grafu.*)],

Graphics[{
If[okzadani&&chyba==False,
{If[zobrazitkci,
{{barva,Thickness[0.5tloustka],osax},
{barva,Thickness[0.5tloustka],osay},
{barvakce,Thickness[tloustka],kruznice},
Text[Style["x",15,barva,FontFamily->Times],{stredkcex+1.5polomer,stredkcey+0.04y1},{Left,Center}],
Text[Style["y",15,barva,FontFamily->Times],{stredkcex+0.03x2,stredkcey+1.25polomer},{Left,Center}]},
Text[""]],
If[zobrazitgraf,
{{barva,Thickness[0.5tloustka],osaxgrafu},
{barva,Thickness[0.5tloustka],osaygrafu},
Text[Style["x",15,barva,FontFamily->Times],{stredgrafux+2polomer,stredkcey+0.04y1},{Left,Center}],
Text[Style["y",15,barva,FontFamily->Times],{stredgrafux+0.03x2,stredkcey+2.2polomer},{Left,Center}]},
Text[""]],
Text[Style[StringJoin[nazevfce," ( x ) = ",ToString[Style[ToString[pravastrana,TraditionalForm],barvafce],StandardForm]],15,barva,FontFamily->Times],{x1-deltax,y2},{Left,Top}],
If[pocetkroku≥1,
{If[prvnikvadrant&&pravastrana<0,
Text[Style[StringJoin["Rovnice s kladnou pravou stranou: ",nazevfce," ( x ) = ",ToString[-pravastrana,TraditionalForm]],15,barva,FontFamily->Times],{x1-deltax,y2-2deltay},{Left,Center}],
Text[""]]},
Text[""]],
If[pocetkroku≥2,
{If[prvnikvadrant,
{Text[Style[StringJoin["Řešení v prvním kvadrantu: (Subscript[x, 0]) = ",ToString[Style[ToString[fi0,TraditionalForm],barvauhel],StandardForm],jednotka],15,barva,FontFamily->Times],{x1-deltax,y2-3*deltay},{Left,Center}],
If[zobrazitkci,
{{barvapruvodic,Dotted,Thickness[0.5tloustka],fcepruvodic0},
{barvauhel,Thickness[0.5tloustka],uhelfi0},
{barvafce,Dotted,Thickness[0.5tloustka],fceline0}},
Text[""]],
If[zobrazitgraf,
{{barvafce,Dotted,Thickness[0.5tloustka],fcelinegraf0},
{barvauhel,Dotted,Thickness[0.8tloustka],fceuhelgraf0},
{barvauhel,PointSize[3.5tloustka],fcebodgraf0}},
Text[""]]},
Text[""]]},
Text[""]],
If[pocetkroku≥3,
{If[dvereseni,
If[oborreseni=="ℝ",
Text[Style[StringJoin["(Subscript[x, 1]) = ",ToString[Style[ToString[fi1,TraditionalForm],barvauhel1],StandardForm],jednotka," + ",periodaktisku,"; k∈ℤ"],15,barva,FontFamily->Times],{x1,y2-4*deltay},{Left,Center}],
Text[Style[StringJoin["(Subscript[x, 1]) = ",ToString[Style[ToString[fi1,TraditionalForm],barvauhel1],StandardForm],jednotka],15,barva,FontFamily->Times],{x1,y2-4*deltay},{Left,Center}]],
If[oborreseni=="ℝ",
Text[Style[StringJoin["x = ",ToString[Style[ToString[fi1,TraditionalForm],barvauhel1],StandardForm],jednotka," + ",periodaktisku,"; k∈ℤ"],15,barva,FontFamily->Times],{x1,y2-4*deltay},{Left,Center}],
Text[Style[StringJoin["x = ",ToString[Style[ToString[fi1,TraditionalForm],barvauhel1],StandardForm],jednotka],15,barva,FontFamily->Times],{x1,y2-4*deltay},{Left,Center}]]],
If[zobrazitkci,
{{barvauhel1,Thickness[0.8tloustka],uhelfi1},
{barvapruvodic,Thickness[0.5tloustka],fcepruvodic1},
{barvafce,Thickness[0.8tloustka],fceline1}},
Text[""]],
If[zobrazitgraf,
{{barvafce,Thickness[0.8tloustka],fcelinegraf1},
{barvauhel1,Dotted,Thickness[0.8tloustka],fceuhelgraf1},
{barvauhel1,PointSize[3.5tloustka],fcebodgraf1}},
Text[""]]},
Text[""]],
If[pocetkroku≥4,
{If[dvereseni,
{If[oborreseni=="ℝ",
Text[Style[StringJoin["(Subscript[x, 2]) = ",ToString[Style[ToString[fi2,TraditionalForm],barvauhel2],StandardForm],jednotka," + ",periodaktisku,"; k∈ℤ"],15,barva,FontFamily->Times],{x1,y2-5*deltay},{Left,Center}],
Text[Style[StringJoin["(Subscript[x, 2]) = ",ToString[Style[ToString[fi2,TraditionalForm],barvauhel2],StandardForm],jednotka],15,barva,FontFamily->Times],{x1,y2-5*deltay},{Left,Center}]],
If[zobrazitkci,
{{barvauhel2,Thickness[0.8tloustka],uhelfi2},
{barvapruvodic,Thickness[0.5tloustka],fcepruvodic2}
(*{barvafce,Thickness[0.8tloustka],fceline2}*)},
Text[""]],
If[zobrazitgraf,
{{barvauhel2,Dotted,Thickness[0.8tloustka],fceuhelgraf2},
{barvauhel2,PointSize[3.5tloustka],fcebodgraf2}},
Text[""]]},
Text[""]]},
Text[""]],
If[pocetkroku≥5∨(pocetkroku≥4&&dvereseni==False),
{If[oborreseni=="ℝ",
Text[Style[StringJoin["O = ",oborreseni],13,barvaODP,FontFamily->Times],{0.1x1,y2},{Right,Top}],
Text[Style[StringJoin["O = ⟨0",jednotka,"; ",ToString[bodmimoD3,TraditionalForm],jednotka,")"],13,barvaODP,FontFamily->Times],{0.1x1,y2},{Right,Top}]],
If[nazevfce=="sin"∨nazevfce=="cos",
If[oborreseni=="ℝ",
Text[Style[StringJoin["D = ",oborreseni],13,barvaODP,FontFamily->Times],{x2,y2},{Right,Top}],
Text[Style[StringJoin["D = ⟨0",jednotka,"; ",ToString[bodmimoD3,TraditionalForm],jednotka,")"],13,barvaODP,FontFamily->Times],{x2,y2},{Right,Top}]],
If[nazevfce=="tg",
If[oborreseni=="ℝ",
Text[Style[StringJoin["D = ",oborreseni,"∖{",ToString[bodmimoD1,TraditionalForm],jednotka," + ",periodaktisku,"; k∈ℤ}"],13,barvaODP,FontFamily->Times],{x2,y2},{Right,Top}],
Text[Style[StringJoin["D = ⟨0",jednotka,"; ",ToString[bodmimoD1,TraditionalForm],jednotka,") ⋃ (",ToString[bodmimoD1,TraditionalForm],jednotka,"; ",ToString[bodmimoD2,TraditionalForm],jednotka,") ⋃ (",ToString[bodmimoD2,TraditionalForm],jednotka,"; ",ToString[bodmimoD3,TraditionalForm],jednotka,")"],13,barvaODP,FontFamily->Times],{x2,y2},{Right,Top}]],
If[oborreseni=="ℝ",
Text[Style[StringJoin["D = ",oborreseni,"∖{",ToString[bodmimoD4,TraditionalForm],jednotka,"k; k∈ℤ}"],13,barvaODP,FontFamily->Times],{x2,y2},{Right,Top}],
Text[Style[StringJoin["D = (0",jednotka,"; ",ToString[bodmimoD4,TraditionalForm],jednotka,") ⋃ (",ToString[bodmimoD4,TraditionalForm],jednotka,"; ",ToString[bodmimoD3,TraditionalForm],jednotka,")"],13,barvaODP,FontFamily->Times],{x2,y2},{Right,Top}]]]],
If[oborreseni=="ℝ",
If[dvereseni,
Text[Style[StringJoin["P = {",ToString[fi1,TraditionalForm],jednotka," + ",periodaktisku,"; ",ToString[fi2,TraditionalForm],jednotka," + ",periodaktisku,"; k∈ℤ}"],13,barvaODP,FontFamily->Times],{x2,y2-deltay},{Right,Top}],
Text[Style[StringJoin["P = {",ToString[fi1,TraditionalForm],jednotka," + ",periodaktisku,"; k∈ℤ}"],13,barvaODP,FontFamily->Times],{x2,y2-deltay},{Right,Top}]],
If[dvereseni,
Text[Style[StringJoin["P = {",ToString[fi1,TraditionalForm],jednotka,"; ",ToString[fi2,TraditionalForm],jednotka,"}"],13,barvaODP,FontFamily->Times],{x2,y2-deltay},{Right,Top}],
Text[Style[StringJoin["P = {",ToString[fi1,TraditionalForm],jednotka,"}"],13,barvaODP,FontFamily->Times],{x2,y2-deltay},{Right,Top}]]]},
Text[""]]},
If[okzadani==False,
Text[Style["N E N Í   Z A D Á N A   Č Í S E L N Á   H O D N O T A",20,barvavarovani,FontFamily->Times,Bold],{stredx,stredy},{Center,Center}],
Text[Style["ROVNICE NEMÁ V REÁLNÝCH ČÍSLECH ŘEŠENÍ!",20,barvavarovani,FontFamily->Times,Bold],{stredx,stredy},{Center,Center}]]]
}],
FormatType->StandardForm,
AxesLabel->{"x","y"},AspectRatio->Automatic,PlotRange->{{x1-deltax,x2+deltax},{y1-deltay,y2}},ImageSize->500
]],

{{nahoda,True,Style["zadávat pravé strany náhodně",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{tabulkovehodnoty,True,Style["pouze 'tabulkové' pravé strany",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{pouzekladne,False,Style["pouze kladné pravé strany",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{vybranafce,defaultnifce,Style["goniometrická funkce",15,barva,FontFamily->Times]},seznamfci,ControlType->PopupMenu},
Delimiter,
{{oborreseni,"ℝ",Style["obor řešení",15,barva,FontFamily->Times]},{"⟨0; 2π)","ℝ"},ControlType->RadioButton},
{{jednotkyuhlu,"radiány",Style["jednotky úhlů",15,barva,FontFamily->Times]},{"radiány","stupně"},ControlType->RadioButton},
Delimiter,
{{zobrazitkci,True,Style["zobrazit jednotkovou kružnici",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitgraf,True,Style["zobrazit graf funkce",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{prvnikvadrant,True,Style["vyjádřit úhel z I. kvadrantu",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Button[" Další krok ",{
If[pocetkroku==0,
If[prvnikvadrant&&pravastrana≥0,
pocetkroku=1,
If[prvnikvadrant==False,
pocetkroku=2]]],
If[pocetkroku≤maxpocetkroku,
{dalsipriklad=False,pocetkroku=pocetkroku+1},
{pocetkroku=0,dalsipriklad=True,minulavybranafce="",minulejednotky=jednotkyuhlu,
If[nahoda,
minulanahoda=False,
minulanahoda=True]}]},ImageSize->{100,Automatic}],
Button[" Další úloha ",{
pocetkroku=0,dalsipriklad=True,minulavybranafce="",minulejednotky=jednotkyuhlu,
If[nahoda,
minulanahoda=False,
minulanahoda=True]},ImageSize->{100,Automatic}],
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, 2008",10,Black,FontFamily->Times],"",Style["Řešení goniometrických rovnic",25,Black,FontFamily->Times],""}];

Spuštění výpočtu
Zpracujte běžným způsobem následující buňku a na dotaz, který se objeví, odpovězte ANO.

GoniometrickeRovnice