Goniometrické funkce v jednotkové kružnici

Následující aplet umožňuje názorně pochopit definici goniometrických funkcí pomocí jednotkové kružnice. Pomocí posuvníků lze měnit zobrazovaný úhel a měřítko grafu. Lze vybrat zobrazení "základních" funkcí sinus, kosinus, tangens a kotangens, ale i funkcí "nadstandardních" sekans a kosekans. Funkce tangens a kotangens lze zobrazit pomocí jednotkové kružnice dvěma způsoby - lze proto zobrazit oba. Lze "zapnout" i výpis hodnot goniometrických funkcí - a to buď v zaokrouhleném tvaru nebo ve tvaru vyjádřeném pomocí odmocnin. Vyjádření pomocí odmocnin je uvedeno v neusměrněném tvaru.

Tlačítkem Ulož graf 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, 2008

Příprava pro vykreslení grafu

jmenosouboru="goniom_fce_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

r=1;
x1=-1.5r; x2=-x1;
y1=x1;y2=-y1;
deltay=0.5;

stredx=((x1+x2)/2);stredy=((y1+y2)/2);
polomeruhlu=0.3r;
tloustka=0.001;
sipka=0.04;

barva=Black;
barvafi=Darker[Red,0.2];
barvasin=Lighter[Blue,0.2];
barvacos=Lighter[Orange,0.2];
barvatg=Darker[Green,0.2];
barvacotg=Magenta;
barvasec=Darker[Orange];
barvacosec=Darker[Blue,0.4];

GonimFceKruznice=Manipulate[
bodx=r*Cos[fi];
body=r*Sin[fi];
pruvodic={
Arrowheads[{0,sipka}],
Arrow[{{stredx,stredy},{bodx,body}}]};
If[fi≥0,
koncovyuhel=Mod[fi,2π],
koncovyuhel=2π-Mod[Abs[fi],2π]];
uhel=Circle[{stredx,stredy},polomeruhlu,{0,koncovyuhel}];
sinusline={Line[{{bodx,stredy},{bodx,body}}]};
cosinusline={Line[{{stredx,body},{bodx,body}}]};
tangensline={Line[{{r,stredy},{r,r Tan[fi]}}]};
tangenspruvodic={Line[{{stredx,stredy},{r,r Tan[fi]}}]};
kotangensline={Line[{{stredx,r},{r Cot[fi],r}}]};
kotangenspruvodic={Line[{{stredx,stredy},{r Cot[fi],r}}]};
sekansline={Line[{{stredx,stredy},{r Sec[fi],stredy}}]};
kosekansline={Line[{{stredx,stredy},{stredx,r Csc[fi]}}]};
sekanskosekanstecna={Line[{{r Sec[fi],stredy},{stredx,r Csc[fi]}}]};
novytangens={Line[{{bodx,body},{r Sec[fi],stredy}}]};
novykotangens={Line[{{bodx,body},{stredx,r Csc[fi]}}]};

If[zobrazithodnoty,
If[tvarhodnot=="přesné",
{If[zobrazitsin,
vypissinu=StringJoin["sin (",ToString[fi,StandardForm],") = ",ToString[Sin[fi],StandardForm]],
vypissinu=""],
If[zobrazitcos,
vypiskosinu=StringJoin["cos (",ToString[fi,StandardForm],") = ",ToString[Cos[fi],StandardForm]],
vypiskosinu=""],
If[zobrazittangens,
If[OddQ[(fi/(π/2))]==False,
vypistangentu=StringJoin["tg (",ToString[fi,StandardForm],") = ",ToString[Tan[fi],StandardForm]],
vypistangentu=StringJoin["tg (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypistangentu=""],
If[zobrazitkotangens,
If[Mod[fi,π]≠0,
vypiskotangentu=StringJoin["cotg (",ToString[fi,StandardForm],") = ",ToString[Cot[fi],StandardForm]],
vypiskotangentu=StringJoin["cotg (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypiskotangentu=""],
If[zobrazitsekans,
If[OddQ[(fi/(π/2))]==False,
vypissekansu=StringJoin["sec (",ToString[fi,StandardForm],") = ",ToString[Sec[fi],StandardForm]],
vypissekansu=StringJoin["sec (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypissekansu=""],
If[zobrazitkosekans,
If[Mod[fi,π]≠0,
vypiskosekansu=StringJoin["cosec (",ToString[fi,StandardForm],") = ",ToString[Csc[fi],StandardForm]],
vypiskosekansu=StringJoin["cosec (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypiskosekansu=""]},
{If[zobrazitsin,
vypissinu=StringJoin["sin (",ToString[fi,StandardForm],") = ",ToString[Round[Sin[fi],0.00001]]],
vypissinu=""],
If[zobrazitcos,
vypiskosinu=StringJoin["cos (",ToString[fi,StandardForm],") = ",ToString[Round[Cos[fi],0.00001]]],
vypiskosinu=""],
If[zobrazittangens,
If[OddQ[(fi/(π/2))]==False,
vypistangentu=StringJoin["tg (",ToString[fi,StandardForm],") = ",ToString[Round[Tan[fi],0.00001]]],
vypistangentu=StringJoin["tg (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypistangentu=""],
If[zobrazitkotangens,
If[Mod[fi,π]≠0,
vypiskotangentu=StringJoin["cotg (",ToString[fi,StandardForm],") = ",ToString[Round[Cot[fi],0.00001]]],
vypiskotangentu=StringJoin["cotg (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypiskotangentu=""],
If[zobrazitsekans,
If[OddQ[(fi/(π/2))]==False,
vypissekansu=StringJoin["sec (",ToString[fi,StandardForm],") = ",ToString[Round[Sec[fi],0.00001]]],
vypissekansu=StringJoin["sec (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypissekansu=""],
If[zobrazitkosekans,
If[Mod[fi,π]≠0,
vypiskosekansu=StringJoin["cosec (",ToString[fi,StandardForm],") = ",ToString[Round[Csc[fi],0.00001]]],
vypiskosekansu=StringJoin["cosec (",ToString[fi,StandardForm],")   N E N Í   D E F I N O V Á N"]],
vypiskosekansu=""]}],
{vypissinu="",
vypiskosinu="",
vypistangentu="",
vypiskotangentu="",
vypissekansu="",
vypiskosekansu=""}];

grafik=Deploy[
Show[
ParametricPlot[{r Cos[p],r Sin[p]},{p,0,2π},PlotStyle->{RGBColor[0,0,0],Thickness[tloustka]},TicksStyle->Directive[20,Bold,Red],Ticks->{{-1,0,1},{-1,1}},Axes->True,LabelStyle->Directive[15,Bold,Black],AxesLabel->{"x","y"},AxesOrigin->{0,0},PlotRange->{{meritko x1,meritko x2},{meritko y1,meritko y2}},ImageSize->400],

Graphics[{
{barvafi,Thickness[3tloustka],pruvodic},
{barvafi,Thickness[tloustka],uhel},
Text[Style["φ",20,barvafi,FontFamily->Times],{0.6polomeruhlu Cos[(koncovyuhel/2)],0.6polomeruhlu Sin[(koncovyuhel/2)]},{Center,Center}],
If[zobrazitsin,
{barvasin,Thickness[5tloustka],sinusline},
Text[""]],
If[zobrazitcos,
{barvacos,Thickness[5tloustka],cosinusline},
Text[""]],
If[zobrazittangens,
If[OddQ[(fi/(π/2))]==False,
{{barvatg,Thickness[5tloustka],tangensline},
{barvafi,Dotted,Thickness[tloustka],tangenspruvodic}},
Text[""]],
Text[""]],
If[zobrazitkotangens,
If[Mod[fi,π]≠0,
{{barvacotg,Thickness[5tloustka],kotangensline},
{barvafi,Dotted,Thickness[tloustka],kotangenspruvodic}},
Text[""]],
Text[""]],
If[zobrazitsekans,
If[OddQ[(fi/(π/2))]==False&&Mod[fi,π]≠0,
{{barva,Dashed,Thickness[tloustka],sekanskosekanstecna},
{barvasec,Thickness[5tloustka],sekansline}},
Text[""]],
Text[""]],
If[zobrazitkosekans,
If[Mod[fi,π]≠0&&OddQ[(fi/(π/2))]==False,
{{barva,Dashed,Thickness[tloustka],sekanskosekanstecna},
{barvacosec,Thickness[5tloustka],kosekansline}},
Text[""]],
Text[""]],
If[zobrazitnovytangens,
If[Mod[fi,π]≠0&&OddQ[(fi/(π/2))]==False,
{{barva,Dashed,Thickness[tloustka],sekanskosekanstecna},
{barvatg,Thickness[5tloustka],novytangens}},
Text[""]],
Text[""]],
If[zobrazitnovykotangens,
If[Mod[fi,π]≠0&&OddQ[(fi/(π/2))]==False,
{If[zobrazitsekans==False&&zobrazitkosekans==False&&zobrazitnovytangens==False,
{barva,Dashed,Thickness[tloustka],sekanskosekanstecna},
Text[""]],
{barvacotg,Thickness[5tloustka],novykotangens}},
Text[""]],
Text[""]]
}],
FormatType->StandardForm,
PlotRange->{{meritko x1,meritko x2},{meritko y1,meritko y2}},ImageSize->500
]
],

{{fi,(π/3),Style["φ",20,barvafi,Italic]},-2π,2π,(π/12)},
{{meritko,1,Style["měřítko",15,barva]},1,2.5,0.1},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitsin,True,Style["sinus",15,barvasin,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitcos,True,Style["kosinus",15,barvacos,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazittangens,True,Style["tangens",15,barvatg,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitkotangens,True,Style["kotangens",15,barvacotg,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazitsekans,False,Style["sekans",15,barvasec,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitkosekans,False,Style["kosekans",15,barvacosec,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazitnovytangens,False,Style["tangens II.",15,barvatg,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitnovykotangens,False,Style["kotangens II.",15,barvacotg,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazithodnoty,True,Style["hodnoty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{tvarhodnot,"přesné",""},{"přesné","zaokrouhlené"},ControlType->RadioButton},
Delimiter,
Dynamic[
Grid[{
{Item[Style[vypissinu,15,barvasin,FontFamily->Times],Alignment->Left]},
{Item[Style[vypiskosinu,15,barvacos,FontFamily->Times],Alignment->Left]},
{Item[Style[vypistangentu,15,barvatg,FontFamily->Times],Alignment->Left]},
{Item[Style[vypiskotangentu,15,barvacotg,FontFamily->Times],Alignment->Left]},
{Item[Style[vypissekansu,15,barvasec,FontFamily->Times],Alignment->Left]},
{Item[Style[vypiskosekansu,15,barvacosec,FontFamily->Times],Alignment->Left]}}]],
Delimiter,
Button[" Ulož graf ",{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["Goniometrické funkce - definice pomocí jednotkové kružnice",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.

GonimFceKruznice