Aplikace pro vykreslování grafů elementárních funkcí

Podobné dokumenty
Středoškolská odborná činnost. Obor SOČ: 1. Matematika a statistika GRAFY FUNKCÍ

Rovnice přímek v rovině

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Diferenciální počet funkcí jedné proměnné

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Náhodná a pseudonáhodná čísla

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Metodický list k didaktickému materiálu

Větvení programů příkaz IF

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Průsečík exponenciální a logaritmické funkce pro základ od 0 do 1

Podmíněné vykonávání

Obecná rovnice kvadratické funkce : y = ax 2 + bx + c Pokud není uvedeno jinak, tak definičním oborem řešených funkcí je množina reálných čísel.

Matematika 1 pro PEF PaE

Funkce jedné reálné proměnné. lineární kvadratická racionální exponenciální logaritmická s absolutní hodnotou

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Planimetrie 2. část, Funkce, Goniometrie. PC a dataprojektor, učebnice. Gymnázium Jiřího Ortena, Kutná Hora. Průřezová témata Poznámky

Úvod do programování - Java. Cvičení č.4

ANOTACE vytvořených/inovovaných materiálů

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Grafy elementárních funkcí v posunutém tvaru

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Zkvalitnění výuky využitím ICT technologií CZ.1.07/1.5.00/ Matematika a její aplikace. Matematika. Závislosti a funkční vztahy

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

Řídicí struktury. alg3 1

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

Nejzajímavější jsou události MouseDown a KeyDown.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Poznámky pro žáky s poruchami učení z matematiky 2. ročník 2005/2006 str. 1. Funkce pro UO 1

SOUHRNNÝ PŘEHLED nově vytvořených / inovovaných materiálů v sadě

Funkce. Vlastnosti funkcí

CZ 1.07/1.1.32/

SBÍRKA ÚLOH I. Základní poznatky Teorie množin. Kniha Kapitola Podkapitola Opakování ze ZŠ Co se hodí si zapamatovat. Přírozená čísla.

Gymnázium Česká a Olympijských nadějí, České Budějovice, Česká 64, 37021

FUNKCE A JEJICH VLASTNOSTI

Gymnázium Jiřího Ortena, Kutná Hora

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Př. program s popojíždějícím autíčkem o 50 pixelů při každém stisku Popojeď

P ˇ REDNÁŠKA 3 FUNKCE

FUNKCE NEPŘÍMÁ ÚMĚRNOST A LINEÁRNÍ LOMENÁ FUNKCE

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Projekt ŠABLONY NA GVM Gymnázium Velké Meziříčí registrační číslo projektu: CZ.1.07/1.5.00/

KFC/SEM, KFC/SEMA Elementární funkce

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

y = 1/(x 3) - 1 x D(f) = R D(f) = R\{3} D(f) = R H(f) = ( ; 2 H(f) = R\{ 1} H(f) = R +

= - rovnost dvou výrazů, za x můžeme dosazovat různá čísla, tím měníme

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

MATURITNÍ TÉMATA Z MATEMATIKY

Tematický celek 03 - Cvičné příklady

prostřednictvím ICT Téma didaktického materiálu RNDr. Václava Šrůtková

První kapitola úvod do problematiky

Učební plán 4. letého studia předmětu matematiky. Učební plán 6. letého studia předmětu matematiky

Škola: Střední škola obchodní, České Budějovice, Husova 9

Střední průmyslová škola, Hronov, Hostovského 910, Hronov

pracovní list studenta

MATEMATIKA Maturitní témata společná část MZ základní úroveň (vychází z Katalogu požadavků MŠMT)

Matematika. ochrana životního prostředí analytická chemie chemická technologie Forma vzdělávání:

Cvičné příklady Hodina 2

MATEMATIKA STUDIJNÍ POŽADAVKY PRO JEDNOTLIVÉ ROČNÍKY STUDIA

Využití programu GeoGebra v Matematické analýze

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Pokročilá práce s proměnnými

Projekt Obrázek strana 135

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

Takto chápanému druhu objektů se říká TŘÍDA.

Excel tabulkový procesor

Algoritmizace a programování

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Funkce. Mocninné funkce. Mgr. Tomáš Pavlica, Ph.D. Digitální učební materiály, Gymnázium Uherské Hradiště.

KTE / ZPE Informační technologie

Algoritmizace a programování

Požadavky k opravným zkouškám z matematiky školní rok

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

B) výchovné a vzdělávací strategie jsou totožné se strategiemi vyučovacího předmětu Matematika.

1. Programování proti rozhraní

Rasterizace je proces při kterém se vektorově definovaná grafika konvertuje na. x 2 x 1

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci

Digitální učební materiál

Projekt IMPLEMENTACE ŠVP. pořadí početních operací, dělitelnost, společný dělitel a násobek, základní početní operace

Matematika PRŮŘEZOVÁ TÉMATA

Metodický list k didaktickému materiálu

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Vypracoval: Mgr. Lukáš Bičík TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

Škola VOŠ a SPŠE Plzeň, IČO , REDIZO

Transkript:

Středoškolská odborná činnost Obor SOČ: 1. Matematika a statistika Aplikace pro vykreslování grafů elementárních funkcí Autor: Škola: Kraj: Jan Procházka Střední škola spojů a informatiky Tábor Bydlinského 2474 390 11 Tábor Jihočeský kraj Konzultant: Mgr. Jiřina Bartoňová Tábor 2016

Prohlášení: Prohlašuji, že jsem mojí práci SOČ vypracoval samostatně a použil jsem pouze podklady uvedené v seznamu vloženém v práci SOČ. Prohlašuji, že tištěná verze a elektronická verze soutěžní práce SOČ jsou shodné. Nemám závažný důvod proti zpřístupňování této práce v souladu se zákonem č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon) v platném znění. V Táboře dne Podpis:

Poděkování: Děkuji Mgr. Jiřině Bartoňové za obětavou pomoc a podnětné připomínky, které mi během práce poskytovala.

ANOTACE Cílem práce bylo vytvořit v jazyce C aplikaci, která vykresluje grafy elementárních funkcí, jak v základním tvaru, tak i s posunem ve směru os x a y. Klíčová slova: SOČ, matematika, grafy funkcí, elementární funkce, soustava souřadná, jednotka, C#, objektově orientované programování, Microsoft Visual Studio 2008

Obsah: strana Úvod 6 1. Seznámení s programovacím jazykem a vývojovým prostředím 7 2. Úvodní formulář aplikace 8 3. Princip vykreslování grafu 9 3.1 Soustava souřadná a nastavení jednotky 9 3.2 Graf funkce 11 4. Okna jednotlivých funkcí 13 4.1 Lineární funkce 13 4.2 Kvadratická funkce 14 4.3 Nepřímá úměrnost 15 4.4 Funkce lineární lomená 16 4.5 Mocninná funkce 17 4.6 Exponenciální funkce 19 4.7 Logaritmická funkce 20 4.8 Sinus 21 4.9 Kosinus 22 4.10 Tangens 23 4.11 Kotangens 24 Závěr 25 Přílohy 26 Zdroje 28 5

Úvod Cílem práce bylo vytvořit aplikaci, která po zadání vstupních parametrů vykresluje grafy funkcí, jak v základním tvaru, tak i s posunem ve směru os x a y. Při volbě tématu pro tuto práci jsem se inspiroval při hodinách matematiky ve druhém ročníku. Probírali jsme postupně různé funkce. U každé jsme sestrojovali její graf. Z grafu funkce v základním tvaru jsme pak odvozovali grafy funkcí, které vznikly přičtením konstanty k argumentu nebo hodnotě základní funkce. U některých funkcí jsme řešili i to, jak se změní graf funkce po vynásobení argumentu nebo hodnoty funkce. Pro vytvoření aplikace, která by se dala využít při výuce matematiky, jsem se rozhodl poté, co jsem se v hodinách programování seznámil s programovacím jazykem C#, hlavně s tvorbou grafiky v tomto jazyce. 6

1. Seznámení s programovacím jazykem a vývojovým prostředím Microsoft Visual Studio je bohaté integrované vývojářské prostředí od společnosti Microsoft, ve kterém je možné vytvořit úžasné programy či aplikace a to například jazycích C#, C++, Basic, F#, Java, PHP a mnoho dalších. www.visualstudio.com Aplikace je vytvořena v programovacím jazyce C#. Tento jazyk je určen pro tvorbu různých aplikací běžící v rozhraní NET Framework. Tento jazyk je jednoduchý, výkonný, přehledný a objektově orientovaný. Řada inovací v jazyce C# umožňuje rychlý vývoj aplikací a zároveň expresivity a elegance jazyků C. Obr. 1 vývojové prostředí 7

2. Úvodní formulář aplikace Obr. 2 úvodní formulář 8

3. Princip vykreslování grafu 3.1 Soustava souřadná a nastavení jednotky Obr.3 soustava souřadná v okně pro kvadratickou funkci Pro vykreslení grafu funkce je použit ovládací prvek Panel. Velikost panelu je 600px na šířku i na výšku. K překreslení panelu dojde vždy, když nastane událost Paint. V obslužné metodě této události je vytvořena kreslící plocha s názvem kp. Graphics kp=e.graphics; Tato plocha je totožná s celou plochou panelu. Při kreslení se používají souřadnice v pixelech. Levý horní roh má souřadnice [0;0]. Souřadnice ve vodorovném směru roste směrem doprava. Souřadnice ve svislém směru roste směrem dolů, tedy obráceně než v soustavě souřadné pro vykreslení grafu. Do panelu se vykresluje soustava souřadná se všemi čtyřmi kvadranty. Středem této soustavy je přibližně střed panelu, tedy bod [300,300]. Jednotka je nastavena v celočíselné proměnné jednotka. Ve výchozím nastavení je hodnota této proměnné 20px. Pokud uživatel usoudí, že jednotku by bylo vhodné změnit, má možnost pomocí 9

přepínače v pravé části okna zvolit jednotku 10px nebo 30px a stiskem tlačítka Graf funkce znovu vykreslit graf do nové soustavy souřadné. Nastavení jednotky je pomocí neúplných podmínek, ve kterých se testuje zaškrtnutí jednotlivých přepínačů. if (jednotkadeset.checked) jednotka = 10; if (jednotkadvacet.checked) jednotka = 20; if (jednotkatřicet.checked) jednotka = 30; Soustava souřadná a následně i graf funkce se kreslí pomocí nástroje nazvaného tužka. Tato tužka kreslí plnou čáru tloušťky 1px. V průběhu kreslení se mění pouze její barva. Pen tužka = new Pen(Color.LightGray); Nejprve se vykreslují světle šedé vodící čáry, poté černé souřadnicové osy, popisky na osách a čárky označující jednotky na jednotlivých osách. Vodící čáry a čárky na osách se vykreslují po čtyřech najednou, vždy v každém kvadrantu jedna. Počet vodících čar samozřejmě závisí na zvolené jednotce a prostoru, který máme pro každý kvadrant k dispozici. int početčárek = 290 / jednotka; Po vykreslení soustavy souřadné se testuje, zda byly zadány parametry pro funkci. Pokud ano, tak se tužkou červené barvy vykreslí křivka tvořená body zadanými v poli body[]. if (zadáno) { tužka.color = Color.Red; kp.drawcurve(tužka, body); } Pro vyhlazení křivky je v úvodu metody příkaz: kp.smoothingmode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; Celý zdrojový kód metody panelgraf_paint je součástí přílohy 1. 10

3.2 Graf funkce Postup při vykreslování grafu budu vysvětlovat na příkladu okna pro kvadratickou funkci. Graf funkce se vykreslí po zadání vstupních parametrů a stisknutí tlačítka Graf funkce. Pro toto tlačítko tímto nastane událost Click. V obslužné metodě pro tuto událost je nejprve nastavení jednotky, které jsem popsal v předchozí kapitole. Poté se z textových polí v pravé části okna načtou vstupní parametry. Zadané hodnoty jsou typu string (textový řetězec), ale pro výpočty je potřeba provést typovou konverzi na typ double (desetinné číslo). Konverze probíhají pomocí konstrukce try catch. Ve větvi try se provede pokus o konverze a ve větvi catch se zachytí případná chyba a provádění metody se zastaví. K chybě dojde, pokud je v poli hodnota, kterou nelze převést na desetinné číslo, např. text nebo je textové pole prázdné. try { } catch { } a = Convert.ToDouble(PoleA.Text); b = Convert.ToDouble(PoleB.Text); c = Convert.ToDouble(PoleC.Text); MessageBox.Show("Chybně zadaná vstupní data", "CHYBA!"); return; Dále se, pokud je to potřeba, testují vstupní parametry. U kvadratické funkce musí být a 0. Při správně zadaných vstupních parametrech se naplní pole body[]. Poté se logická proměnná zadáno nastaví na true a voláním metody panelgraf.refresh() se vyvolá překreslení panelu s grafem funkce. Pro vykreslování křivky grafu funkce metodou DrawCurve()je potřeba vytvořit pole bodů. Pokud je graf tvořen více křivkami (např. dvě větve hyperboly u nepřímé úměrnosti nebo jednotlivé křivky u tangens a kotangens), pak musíme vytvořit pole pro každou křivku. Pole je datová struktura s daným počtem složek stejného typu, které se vzájemně rozlišují indexem. V jazyce C# se indexuje celými čísly od 0. Souřadnice bodů v poli jsou v pixelech vzhledem k souřadnicím panelu. Při výpočtu souřadnic nejprve musíme vypočítat bod v souřadnicích x, y vzhledem 11

k soustavě souřadné pro vykreslení grafu. K tomu slouží reálné proměnné x a y. Z nich poté vytvoříme hodnoty proměnných xpx a ypx. xpx = (int) (x * jednotka + 300); ypx = (int) (-y * jednotka + 300); Dále vytvoříme bod, který zapíšeme do pole body[] na pozici danou proměnnou index. Point bod = new Point(xpx,ypx); body[index]=bod; Hodnotu proměnné x nastavíme na začátek intervalu, ve kterém vykreslujeme graf. Konkrétně u kvadratické funkce je to -4 jednotky od vrcholu paraboly. Po dopočítání y podle předpisu funkce a vytvoření bodu v pixelech se x zvětší o 0,5 jednotky. Cyklus pro výpočet x končí +4 jednotky od vrcholu. Vytvoříme tak pole o celkem 17 bodech (8 doleva od vrcholu, vrchol a 8 doprava). Pro každou funkci je vytvořeno pole o jiném počtu bodů, protože se liší intervaly, ve kterých se funkce kreslí a také velikost posunu x. Celý zdrojový kód metody tlačítkokresligraf_click je součástí přílohy. 12

4. Okna jednotlivých funkcí 4.1 Lineární funkce Předpis lineární funkce je y = ax + b. Grafem lineární funkce je přímka. Graf b se vykresluje jako úsečka s body pro x 1 10 a x 2 x1 20. Tedy - 10 jednotek a od průsečíku s osu x. Obr.4 graf lineární funkce 13

4.2 Kvadratická funkce Předpis kvadratické funkce je y = ax 2 + bx + c, kde a 0. Tuto skutečnost jsem zohlednil v testování podmínky pro zadané a Grafem kvadratické funkce je parabola. Pole pro vykreslení křivky má 17 bodů. Počáteční x je nastaveno na -4 jednotky od vrcholu paraboly jednotky. b. Posun je o 0,5 2a Obr. č. 5-graf kvadratické funkce 14

4.3 Nepřímá úměrnost Předpis nepřímé úměrnosti je y = k x+m + n Grafem nepřímé úměrnosti je rovnoosá hyperbola. Nepřímá úměrnost je na rozdíl od předchozích funkcí vykreslována ne jednou, ale dvěma křivkami. Počítání pro x je nastaveno -4 jednotky od vrcholu hyperboly. Posun je 0,2 jednotky. Obr. č. 6 - graf nepřímé úměrnosti 15

4.4 Funkce lineární lomená Předpis funkce je x = ax+b, kde c 0. Tuto skutečnost jsem zohlednil cx+d v testování podmínky pro zadané c. Grafem funkce je hyperbola. Funkce lineárně lomená se stejně jako nepřímá úměrnost vykresluje dvěma křivkami. Pole pro vykreslení křivky mají 20 bodů. Pro levou křivku je x nastaveno x = d 0,2 jednotky od nulového bodu, tedy x = d c + 0,2 c 4. Posun je o 0,2 jednotky. Pravá křivka začíná Obr. č. 7 - graf lineárně lomené funkce 16

4.5 Mocninná funkce Předpis mocninné funkce je y = (x + m) k + n, kde kεz, k 0. Tuto skutečnost jsem zohlednil v testování podmínky pro zadané k a datovým typem proměnné k. Pro k>0 je grafem funkce jedna křivka, při jejím vykreslení postupujeme stejně jako u kvadratické funkce. Pro k<0 tvoří graf funkce dvě křivky, při jejich vykreslení postupujeme stejně jako u nepřímé úměrnosti. Při testování mocninné funkce se vyskytl problém. Pro k>3 měla křivka nesprávný tvar. Chyba byla způsobena velmi vysokými nebo velmi malými funkčními hodnotami, které způsobily přetečení proměnné a k tím chybnému výpočtu souřadnice bodu křivky. Pro vyřešení tohoto problému jsem pro tuto funkci musel zvolit jinou datovou strukturu pro zadání bodů. Statickou datovou strukturu pole body [] jsem nahradil dynamickou datovou strukturou seznambodů. List<Point> seznambodů=new List<Point>(); Pole bylo nevyhovující, protože má pevnou délku, kterou je nutné zadat již při deklaraci. Datová struktura seznam je dynamická, to znamená, že nemusíme předem vědět, kolik bodů bude obsahovat. Můžeme do něj body vkládat, až po otestování, zda se nám vejdou do vykreslované části grafu. Metoda pro vykreslení křivky bohužel umí pracovat pouze s polem. Je proto nutné před vykreslením zjistit délku seznamu, deklarovat stejně velké pole a seznam převést na pole. int početbodů=seznambodů.count(); Point[] body = new Point[početBodů]; for (int index = 0; index < početbodů; index++) body[index] = seznambodů[index]; kp.drawcurve(tužka, body); seznambodů=new List<Point>(); 17

Obr. č. 8 - graf mocninné funkce pro k>0 Obr. č.9 - graf mocninné funkce pro k<0 18

4.6 Exponenciální funkce Předpis exponenciální funkce je y = a x+m + n, kde a > 0, a 1. Tuto skutečnost jsem zohlednil v testování podmínky pro zadané a. Grafem exponenciální funkce je exponenciální křivka. Pole pro vykreslení křivky má 41 bodů. Počítání pro x je nastaveno na -4 od jednotky od bodu m exponenciální křivky. Posun je o 0,2 jednotky. Obr. č. 10 - graf exponenciální funkce 19

4.7 Logaritmická funkce Předpis logaritmické funkce je y = log a (x + m) + n, kde a > 0, a 1. Tuto skutečnost jsem zohlednil v testování podmínky pro zadané a. Grafem logaritmické funkce je logaritmická křivka. Pole pro vykreslení obsahuje 40 bodů. Počáteční x je nastaveno na 0,1 jednotky od m. Posun je o 0,2 jednotky. Obr. č. 11 - graf logaritmické funkce 20

4.8 Sinus Předpis funkce sinus je y = a sin(b x + m) + n. Grafem funkce sinus je sinusoida. Pole pro vykreslení křivky má 81 bodů. Počáteční x je nastaveno na -4 π od vrcholu sinusoidy. Posun je o 0,1 π jednotky. Obr. č. 12 - graf funkce sinus 21

4.9 Kosinus Předpis funkce kosinus je y = a cos(b x + m) + n. Grafem funkce kosinus je kosinusoida. Pole pro vykreslení křivky má 81 bodů. Počáteční x je nastaveno na -4 π od vrcholu sinusoidy. Posun je o 0,1 π jednotky. Obr. č. 13 - graf funkce kosinus 22

4.10 Tangens Předpis funkce je y = a tg(b x + m) + n. Grafem funkce je nekonečně mnoho křivek posunutých o celočíselné násobky π. Pole pro vykreslení křivky v intervalu ( π m; π m) má 9 bodů. Počáteční x je nastaveno na -0,4π jednotky od 2 2 bodu m. Posun je o 0,1 π jednotky. Celkem se vykreslují 3 křivky. Pole bodů pro posunuté křivky se vytvářejí z pole pro původní křivku tím, že se x-ová souřadnice všech bodů zvětší nebo zmenší o π. Obr. č. 14 - graf funkce tangens 23

4.11 Kotangens Předpis funkce je y = a cotg(b x + m) + n. Grafem funkce je nekonečně mnoho křivek posunutých o celočíselné násobky π. Pole pro vykreslení křivky v intervalu ( m; π m) má 9 bodů. Počáteční x je nastaveno na +0,1π jednotky od bodu m. Posun je o 0,1 π jednotky. Celkem se vykreslují 3 křivky. Pole bodů pro posunuté křivky se vytvářejí z pole pro původní křivku tím, že se x-ová souřadnice všech bodů zvětší nebo zmenší o π. Hodnoty funkce kotangens se počítají jako převrácená hodnota funkce tangens. Důvodem je chybějící funkce pro kotangens v třídě matematických funkce Math(). Obr. č. 15 - graf funkce kotangens 24

Závěr Při tvorbě aplikace jsem si osvěžil znalosti o grafech funkcí. Zároveň jsem si poprvé vyzkoušel vytvořit kompletní aplikaci od návrhu vzhledu a návrhu algoritmu až po realizaci a testování funkčnosti aplikace na vzorových datech. Do aplikace jsem zahrnul všechny funkce, o kterých jsme se učili. Zároveň jsem chtěl zpracovat i všechny možné změny grafu funkce, tedy co se s grafem funkce děje při přičítání a násobení argumentu nebo hodnoty funkce. Jediné co jsem v aplikaci neřešil, je vliv absolutní hodnoty na graf funkce. K určení absolutní hodnoty slouží funkce Math.Abs(). Její použití není problém. Nevím si ovšem rady se způsobem zadání vstupních dat, konkrétně s rozsahem platnosti absolutní hodnoty. Aplikaci jsem předvedl vyučujícím matematiky na naší škole. Hodnotili ji jako zajímavou a chtějí tuto aplikaci využívat při výuce. 25

Přílohy Příloha 1 Zdrojový kód pro okno Kvadratická funkce public partial class kvadratickáfunkce : Form { double a = 0; double b = 0; double c = 0; bool zadáno = false; Point [] body = new Point [17]; int jednotka = 20; public kvadratickáfunkce() { InitializeComponent(); } private void tlačítkokresligraf_click(object sender, EventArgs e) { if (jednotkadeset.checked) jednotka = 10; if (jednotkadvacet.checked) jednotka = 20; if (jednotkatřicet.checked) jednotka = 30; try { a = Convert.ToDouble(PoleA.Text); b = Convert.ToDouble(PoleB.Text); c = Convert.ToDouble(PoleC.Text); } catch { MessageBox.Show("Chybně zadaná vstupní data", "CHYBA!"); return; } if (a == 0) MessageBox.Show("Chybně zadaná vstupní data", "CHYBA!"); else { double vrcholx = -b / (2 * a); double x = vrcholx - 4; double y; int xpx, ypx; for (int index = 0; index <= 16; index++) { y = a * x * x + b * x + c; xpx = (int) (x * jednotka + 300); ypx = (int) (-y * jednotka + 300); Point bod = new Point(xpx,ypx); body[index]=bod; x += 0.5; } zadáno = true; panelgraf.refresh(); } } 26

private void panelgraf_paint(object sender, PaintEventArgs e) { Graphics kp=e.graphics; kp.smoothingmode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; Pen tužka = new Pen(Color.LightGray); int početčárek = 290 / jednotka; for (int index = 1; index < početčárek; index++) { kp.drawline(tužka,300+index*jednotka,10,300+index*jednotka,589); kp.drawline(tužka,300-index*jednotka,10,300-index*jednotka,589); kp.drawline(tužka,10,300+index*jednotka,589,300+index*jednotka); kp.drawline(tužka,10,300-index*jednotka,589,300-index*jednotka); } tužka.color = Color.Black; kp.drawline(tužka, 10, 300, 589, 300); kp.drawline(tužka, 300, 10, 300, 589); kp.drawstring("0", new Font("Arial", 8), Brushes.Black, 290, 301); kp.drawstring("-10", new Font("Arial", 8), Brushes.Black, 69 + jednotka, 302); //číslo -10 na X kp.drawstring("-5", new Font("Arial", 8), Brushes.Black, 172 + jednotka, 302); //číslo -5 na X kp.drawstring("5", new Font("Arial", 8), Brushes.Black, 375 + jednotka, 302); //číslo 5 na X kp.drawstring("10", new Font("Arial", 8), Brushes.Black, 473 + jednotka, 302); //číslo 10 na X kp.drawstring("-10", new Font("Arial", 8), Brushes.Black, 278, 513 - jednotka); //číslo -10 na Y kp.drawstring("-5", new Font("Arial", 8), Brushes.Black, 285, 414 - jednotka); //číslo -5 na Y kp.drawstring("5", new Font("Arial", 8), Brushes.Black, 289, 214 - jednotka); //číslo 5 na Y kp.drawstring("10", new Font("Arial", 8), Brushes.Black, 283, 113 - jednotka); //číslo 10 na Y kp.drawstring("x", new Font("Arial", 8), Brushes.Black, 585, 301); kp.drawstring("y", new Font("Arial", 8), Brushes.Black, 289, 5); for (int index = 1; index < početčárek; index++) { kp.drawline(tužka, 300 + index * jednotka, 297, 300 + index * jednotka, 303); kp.drawline(tužka, 300 - index * jednotka, 297, 300 - index * jednotka, 303); kp.drawline(tužka, 297,300 + index * jednotka, 303, 300 + index * jednotka); kp.drawline(tužka, 297, 300 - index * jednotka, 303, 300 - index * jednotka); } } } if (zadáno) { tužka.color = Color.Red; kp.drawcurve(tužka, body); } 27

Příloha 2 Obsah vloženého CD Text práce ve formátu PDF. Složka s kompletním zdrojovým kódem aplikace. Samostatně spustitelná aplikace Zdroje www.matematika.cz www.visualstudio.com www.msdn.microsoft.com ODVÁRKO, Oldřich. Matematika pro gymnázia, Funkce. Prometheus,2007. ISBN 978-80-7196-164-2 ODVÁRKO, Oldřich. Matematika pro gymnázia, Goniometrie. Prometheus, 1994. ISBN 80-85-849-57-7 28